【问题标题】:ASP.NET Session timeout behaviorASP.NET 会话超时行为
【发布时间】:2015-05-21 11:08:32
【问题描述】:

我在我的代码中使用 Session 对象来存储将保存到数据库中的用户登录。

我想确定会话超时的行为。

如果会话超时,用户可以做什么?我猜浏览到不同的页面不会恢复会话?所以唯一的选择是关闭所有浏览器并返回并激活会话?

我想知道在什么情况下 Session 不会再次存活。

会话超时还会触发 global.aspx 中的 Session_End 吗?

【问题讨论】:

    标签: c# asp.net vb.net session-timeout


    【解决方案1】:

    只要继续发出请求,会话就会被视为处于活动状态 具有相同的 SessionID 值。如果请求之间的时间 特定会话超过指定的超时值(以分钟为单位), 会话被视为过期。 Reference

    我相信你在每个页面(或masterpage)中检查用户是否登录,所以只要用户不是空闲的并且他正在使用系统,会话就会更新,不用担心. 如果用户长时间空闲并且会话已过期,那么出于安全原因让他再次登录是合乎逻辑的。

    【讨论】:

    • 好的。我在这里很困惑。我将超时设置为 1 分钟以进行测试。然后在按钮单击事件中我检查会话,1分钟后会话为空,但是如果用户注销并再次返回会话再次填充。你能解释一下吗?
    • @S Nash 用户登录时会填充会话。我相信您所描述的是预期的效果。用户登录,会话填充。一分钟后(设置超时)会话变为空。用户重新登录会话填充。
    【解决方案2】:

    在注销时使用:

    Session.Remove("会话名称");

    【讨论】:

      【解决方案3】:

      我相信您并没有通过在 Session_End 事件中对会话对象调用 Abandon 方法来明确终止会话。

      退出会话会触发此事件。显然,用户在尝试在页面之间导航时必须被带到登录页面。

      【讨论】:

        【解决方案4】:

        使用会话来存储经过验证的用户的详细信息是很常见的。会话在一段时间不活动后超时(我相信默认为 20 分钟,但可以在 web.config 中更改。)这通常是可取的,因为如果用户放弃站点(或离开他们的计算机)而不注销它将(最终)终止会话并有效地自动将它们注销。

        读取或写入会话将重置超时倒计时。因此,如果每个网页都检查用户是否已登录,如果在 20 分钟内查看新页面,他们将需要做的所有事情都不会被注销。

        如果用户注销(或会话超时),他们不需要关闭浏览器,只需返回登录页面并再次登录。所以对于每个应该被保护的页面,检查他们的会话是否存在并且已经登录,或者将他们重定向到登录页面。

        是的,会话超时会触发 session_end 事件。

        【讨论】:

          猜你喜欢
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 2020-07-23
          • 2011-08-12
          相关资源
          最近更新 更多