如何将会话超时时间设置为20分钟以上?

6

我在我的项目中遇到了一个问题。我的网站上有一个管理员面板,人们可以使用用户名和密码登录并编辑网站内容。有时候用户可能需要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分钟后过期。


并不是与你的问题直接相关,但是你应该考虑在登录失败时提供更友好的错误提示信息。 - Brandon
你应该修复你的应用程序,这样任何超时都不会影响用户提交的内容。用户被要求重新登录后,他们的内容不会丢失。如果你打算使用超时,无论你将其设置为多长时间,总会有人受到影响。 - RichieHindle
我用土耳其语写了更好的错误信息,Brandon,不用担心 :) - Mehmet Kaleli
你是对的 Richie,但我想知道为什么它不起作用。 - Mehmet Kaleli
你正在使用ASP.NET表单身份验证吗? - Kev
3个回答

13

另一个提示是查看您的IIS设置。当我不得不更改超时时间时,我还必须进行一些服务器端的更改。检查应用程序池的空闲超时设置。如果站点空闲(我认为默认为5分钟),那么应用程序池会关闭以节省服务器资源。这也会终止会话。

尝试增加应用程序池的空闲超时时间,看看是否会有所帮助。

IIS » 目录 » 配置 » 选项 和 AppPool » 属性

显然,如果您处于共享托管环境中,您很可能无法进行调整。


很不幸,我在一个共享主机Qubar上。 - Mehmet Kaleli
1
当我遇到这种情况时,似乎 IIS 会话超时始终优先于在 web.config 中定义的设置。我们不得不将 IIS 超时时间增加到 60 分钟。尝试与您的共享主机提供商合作,了解他们为会话超时设置了什么,并查看是否有任何能够解决此问题的方法。 - BStruthers

6
当您使用默认的"InProc"(进程内)会话状态模式时,会话状态数据非常脆弱,并且在应用程序池重启时丢失。考虑使用其他内置的会话状态模式,这些模式运行在进程外部,因此免疫于应用程序池的重启。这些模式包括"StateServer"模式(在单独的进程中内存运行)和"SqlServer"模式(将状态数据存储在SQL Server DB中)。为了使您的会话数据更加健壮,特别是如果您需要更长的会话超时时间,您将希望使用其中一种进程外会话状态模式。这并不能回答您的会话提前超时的问题,但它将成为解决方案的一部分。
各种会话状态模式在健壮性、内存需求、可扩展性和性能方面都有其优点和缺点,因此您需要熟悉它们,以便确定适合您的应用程序的正确选择。
顺便说一句,始终考虑您的数据是否需要进入会话。当数据在同一页面的后续提交之间需要时,最好使用ViewState,前提是数据量不太大。完全可以开发不使用会话或仅适度使用会话的ASP.NET应用程序,通常情况下,当您不使用会话时,事情会更加直观,例如浏览器的后退按钮。您的数据库用于持久化您的数据,因此不要害羞地使用它。如果您正在使用会话在页面之间传递表格或数据集,请考虑您是否真的需要这样做。您可以通过查询字符串传递参数,然后在请求页面时使用这些参数从数据库中获取数据。
参考:MSDN 会话状态模式

谢谢!!!无意中看到了这条评论,当时在查找完全不同的东西,一直存在“InProc”引起的问题,但从未想过如何解决。再次感谢,非常好的评论! - Иво Недев

1
你确定会话超时是导致问题的原因吗?这也可能是由于身份验证超时引起的(即身份验证 cookie 在 20 分钟后过期)。确保会话超时和身份验证超时设置为相同的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接