【问题标题】:How to set session timeout more than 20 min.?如何设置会话超时超过 20 分钟?
【发布时间】:2010-12-16 02:30:25
【问题描述】:

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

【问题讨论】:

  • 与您的问题没有太大关系,但您应该考虑在登录失败时提供更好的错误消息。
  • 您应该修复您的应用程序,以便任何超时都无关紧要 - 用户提交他们的内容,被要求再次登录,并且他们的内容不会丢失。如果您要使用超时,无论您使用多长时间,都会有人点击它们。
  • 我用土耳其语写了更好的错误信息,布兰登,别担心:)
  • 你是对的 Richie,但我想知道为什么它不起作用。
  • 你在使用 ASP.NET Forms 身份验证吗?

标签: asp.net iis session-state


【解决方案1】:

您确定这是超时的会话吗?它也可能是由您的身份验证超时引起的(即身份验证 cookie 设置为在 20 分钟后过期)。确保会话超时和身份验证超时设置为相同的值。

【讨论】:

    【解决方案2】:

    另一个提示是查看您的 IIS 设置。当我不得不改变我的超时时间时,我也不得不做一些服务器端的改变。检查应用程序池的空闲超时设置。如果站点空闲(我认为默认为 5 分钟),则应用程序池将关闭以节省服务器资源。这也会杀死一个会话。

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

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

    显然,如果您在共享主机环境中,您很可能无法对此进行调整。

    【讨论】:

    • 不幸的是,我在共享主机 Qubar。
    • 当我遇到这种情况时,似乎 IIS 会话超时总是胜过 web.config 中定义的超时。我们不得不将 IIS 提高到 60 分钟。尝试与您的共享提供商合作,了解他们为会话超时设置的内容以及您是否可以采取任何措施。
    【解决方案3】:

    当你使用默认的“InProc”(In Process)会话状态模式时,会话状态数据非常脆弱,每当AppPool回收时就会丢失。

    考虑使用其他内置会话状态模式,这些模式在进程外运行,因此不受 AppPool 回收的影响。它们是“StateServer”模式(在单独的进程中在内存中运行)和“SqlServer”模式(状态数据存储在 SQL Server DB 中)。

    您将需要使用其中一种进程外会话状态模式,以使您的会话数据更加稳健,尤其是在您需要更长的会话超时时间时。这并不能回答您关于会话为何过早超时的问题,但它将成为解决方案的一部分。

    各种会话状态模式在健壮性、内存要求、可扩展性和性能方面都有其优点和缺点,因此您需要熟悉它们才能为您的应用程序确定正确的选择。

    附带说明,请始终考虑您的数据是否需要进入会话。如果在同一页面的回发之间需要数据,通常最好使用 ViewState,前提是数据量不会过多。完全有可能开发根本不使用 Session 的 ASP.NET 应用程序,或者非常谨慎地使用它,通常我发现当你不使用 Session 时,事情会更直观地工作,例如。浏览器的后退按钮。您的数据库可以保存您的数据,所以不要羞于使用它。如果您使用 Session 在页面之间传递表或数据集,请考虑您是否真的需要。您可以通过查询字符串传递参数,然后在请求页面时使用参数从数据库中获取数据吗?

    参考:MSDN Session State Modes

    【讨论】:

    • 谢谢你!!!!!!偶然看到这条评论,查找完全不同的东西,遇到了“InProc”引入的问题,但从未弄清楚如何解决它们。再次感谢,很棒的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2014-04-17
    • 2013-06-15
    • 1970-01-01
    • 2021-12-28
    • 2015-11-15
    相关资源
    最近更新 更多