科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件session老是丢失的问题

session老是丢失的问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

session老是丢失的问题

作者:csdn 来源:csdn 2009年12月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

session老是丢失的问题

   有谁能帮我讲讲session老是丢失的问题吗?我的项目发布到网上前段时间运行很好,今天突然session疯狂丢失,登录上去才半分钟就丢失了。项目使用了ifrom框架,ajax控件,session设置了2个小时,空间是服务商的,有明白的达人请求帮助。

    把session保存到StateServer服务中就可以了

<sessionState mode="StateServer" cookieless="false" timeout="50" />

(1)
您先按了 Ctrl + F5 浏览 aspx,但又在 Visual Studio 中改了代码,此时再重新整理或再操作 aspx,就有可能遗失 Session (并非一定会)。


(2)
take this:
避免 ASP.NET 的使用者仅短时间闲置,即被强制 Logout
http://www.cnblogs.com/WizardWu/archive/2008/07/31/1256907.html

当您的 Session 丢失,是只有在你一个人在在线时(亦即你在开发或测试期间),还要参考「应用程序集区」默认值 (简体中文版 IIS 名称可能不同)。

总结上述观念,是因为 IIS 6 的「应用程序集区」的「闲置等候时间」(参考上图 2),是指 Web 应用程序 (ASP.NET) 资源多久没有被人使用时,就进行系统资源回收。若我们在开发 project 期间,因为多半是单一个使用者,在单一主机上测试,所以「应用程序集区」的「闲置等候时间」若小于 Web.config 的 Session timeout 设定值,就会以「应用程序集区」的「闲置等候时间」设定时间来回收资源;不过若系统正式上线后,在多人使用的 Web 环境下,比较不会发生此种情形。

情况多种多样。以下均是推断。

1、你说今天session疯狂丢失,这个疯狂丢失的时间持续多久?
如果说这样的情况出现前后一共20分钟左右或更短,可能是杀毒软件正在扫描你的网站的web.config或global.asax.

2、你的程序中是否有动态修改web.config的地方?不过,即使有的话,修改web.config后,应用再重启,估计不会超过5分钟,也就是说这样的情况前后不会超过5分钟。

3、如果虚拟主机提供商的IIS遇到问题,管理员在不停的开启关闭IIS也会造成这做情况的发生。

4、管理员正在修改machine.config。

 

我的解决办法:
第一步:创建一个空白页面AutoRefresh.aspx,在 <HEAD> </HEAD>加入
<script type="text/javascript">setTimeout("location.href='AutoRefresh.aspx' ",120000) </script>
120000代表2分钟自动刷新一次

第二步:将这个页面'AutoRefresh.aspx' 用框架包含到显示的主页面内就可以了
<iframe width="1" height="1" src="AutoRefresh.aspx"> </iframe>


这个方法已经用了很久了,我在后台用户监控用户状态,发现有的用户竟然连续在线14多个小时,多用于需要持续在线的管理系统,我们的用户没有反映过掉线的情况

一步:创建一个空白页面AutoRefresh.aspx,在 <HEAD> </HEAD>加入
<script type="text/javascript">setTimeout("location.href='AutoRefresh.aspx' ",120000) </script>
120000代表2分钟自动刷新一次

第二步:将这个页面'AutoRefresh.aspx' 用框架包含到显示的主页面内就可以了
<iframe width="1" height="1" src="AutoRefresh.aspx"> </iframe>

 

当访问默认首页default.aspx时,会自动跳转到login.aspx页面上请求登录,随便输入用户名和密码,点击“登录”按钮,会回到首页,并显示当前登录的用户名。
 
  Web.config
  <configuration>
  <system.web>
  <compilation debug="true"/>
  <authentication mode="Forms">
  <forms loginUrl="login.aspx" name = ".ASPXFORMSAUTH" />
  </authentication>
  <authorization>
  <deny users="?"/>
  </authorization>
  </system.web>
  </configuration>
 
  default.aspx
  <HTML>
  <HEAD>
  <TITLE>首页 </TITLE>
  <script language="VB" runat="server">
  Sub Page_Load(Sender As Object, e As EventArgs)
  Message.Text = String.Format("你好,{0}", Context.User.Identity.Name)
  End Sub
  sub btnSignout_Click(Sender as Object, E as EventArgs)
  FormsAuthentication.SignOut()
  Response.Redirect("login.aspx")
  end sub
 
  </script>
  </HEAD>
  <BODY>
  <asp:label id="Message" runat="server"/>
  <br>
  <form method="post" runat="server">
  <asp:button id="btnSignout" Text="退出登录" runat="server" OnClick="btnSignout_Click"/>
  </form>
  </BODY>
  </HTML>
 
  login.aspx
  <HEAD>
  <TITLE>首页 </TITLE>
  <script lanugage="c#" runat="server">
  private void Page_Load(object sender, EventArgs e)
  {
  if (Request.IsAuthenticated)
  Response.Redirect("default.aspx");
  }
  void btnLogin_Click(Object sender, EventArgs e)
  {
  if (txtUsername.Text != null && txtUsername.Text != String.Empty && txtPassword.Text != null && txtPassword.Text != String.Empty)
  FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true);
  else
  lblError.Text = "错误的用户名/密码";
  }
  </script>
  </HEAD>
  <BODY>
  <form method="post" runat="server">
 
  <asp:Label id="lblUsername" runat="server" Text="用户名:"/>
     
  <asp:Textbox id="txtUsername" runat="server"/>
  <br>
  <br>
  <asp:Label id="lblPassword" runat="server" Text="密 码:"/>
     
  <asp:Textbox id="txtPassword" runat="server" TextMode="password"/>
  <br>
  <asp:button id="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
 
  </form>
  <hr>
  <br>
  <asp:Label id="lblError" forecolor="red" runat="server"/>
  </BODY>
  </HTML>

 

如果你的空间支持php,那么就很有可能存在这个问题。若是这个问题就没办法了,这个是php核心与asp.net的核心冲突造成的。比方,服务器上有别人的用户使用的php,他的网站有人正在访问,php的session保存位置与asp或asp.net是相同,可能会出现session被挤掉了。

目前针对这个问题只有两种办法:

1、更换空间,服务器上最好只支持asp.net和asp(推荐)

2、让空间商升级php版本。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章