我的项目有问题。我的网站上有一个管理面板。人们可以使用用户名和密码登录,可以编辑网站内容。有时,用户最多可能需要30-40分钟才能输入内容,但会话超时仅在20分钟后过期。
我尝试在web.config
中进行配置,例如:
<authentication mode="Windows"/>
<sessionState timeout="60" />
并且像这样:
<system.web>
<sessionState timeout="60"></sessionState>
</system.web>
也尝试了我的形式:
if (ds.Tables["LOG"].Rows.Count > 0)
{
Session["IsLoggedIn"] = "true";
Session.Timeout = 60;
Response.Redirect("Default.aspx");
}
else
{
Label1.Text = "Username/Password is wrong!!";
}
上述解决方案均无效。我分别和一起尝试了每个,但会议在20分钟后仍然过期。
答案 0 :(得分:13)
另一个提示是查看您的IIS设置。当我不得不改变我的超时时,我不得不进行一些服务器端更改。检查应用程序池的空闲超时设置。如果站点空闲(我认为默认为5分钟),则应用程序池将关闭以节省服务器资源。这也会杀死一个会话。
尝试增加应用程序池的空闲超时,看看这是否有帮助。
IIS»目录»配置»选项 和 AppPool»属性
显然,如果您处于共享托管环境中,您很可能无法对此进行调整。
答案 1 :(得分:6)
当您使用默认会话状态模式“InProc”(正在处理中)时,会话状态数据非常脆弱,并且每当AppPool回收时都会丢失。
考虑使用其他内置会话状态模式,这些模式在进程外运行,因此不受AppPool回收的影响。这些是“StateServer”模式(在单独的进程中在内存中运行)和“SqlServer”模式(存储在SQL Server DB中的状态数据)。
您将需要使用其中一种进程外会话状态模式,以便为会话数据提供更强大的功能,尤其是在您需要更长的会话超时时。这并没有回答你为什么你的会话过早地超时的问题,但它将成为解决方案的一部分。
各种会话状态模式在稳健性,内存要求,可伸缩性和性能方面都有其优缺点,因此您需要熟悉它们,以便为您的应用程序确定正确的选择。
作为旁注,请始终考虑您的数据是否需要进入会话。如果数据量不是太多,在同一页面上的回发之间需要数据时,通常最好使用ViewState。完全有可能开发完全不使用Session的ASP.NET应用程序,或者非常谨慎地使用它,一般来说,当你不使用Session时,我会发现事情更直观。浏览器后退按钮。您的数据库可以保留您的数据,因此不要羞于使用它。如果您使用Session在页面之间传递表格或数据集,请考虑您是否真的需要。您可以通过查询字符串传递参数,然后在请求页面时使用参数从数据库中获取数据吗?
答案 2 :(得分:1)
你确定那个超时的会话吗?它也可能是由您的身份验证超时引起的(即身份验证cookie设置为在20分钟后过期)。确保会话超时和身份验证超时都设置为相同的值。