扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者