【问题标题】:When Session will be Expired in Asp.net or Asp.Net MVC?Asp.net 或 Asp.Net MVC 中的会话何时过期?
【发布时间】:2017-12-20 03:12:44
【问题描述】:

我是 .net 技术的新手,我对 session 的概念感到困惑,只是我想知道 会话何时过期?

1) 会话是否超时

(或)

2) 用户处于空闲状态。

请任何人澄清我的疑问。

【问题讨论】:

  • 是会话的超时时间。每次用户从服务器请求某些东西时,会话都会刷新。如果您希望会话在用户长时间空闲时保持活动状态,则需要确保浏览器定期发出请求。我通过在标题控件(出现在每个页面上)中使用隐藏的 iframe 来做到这一点,并运行一个 javascript 计时器,每 15 分钟重新加载 iframe 中的(空)页面。
  • @MartinSmellworse - 这听起来像是一个糟糕的解决方案。更好的办法是在不严重依赖会话状态的情况下解决您的问题,无论您多么努力地阻止它,它都会丢失。
  • @AntP - 它适用于一个拥有数千名用户的网站,这些用户全天打开我的应用程序,但经常被最小化。会话消失的唯一情况是用户失去连接并且他们都可以一键登录以重新登录。另一种方法是始终在查询字符串中传递登录数据并检查每个页面上的凭据。数据库大受欢迎。

标签: asp.net asp.net-mvc session


【解决方案1】:

会话丢失的原因有很多。仅举几例,

  • 应用程序池被回收。 - 我们会通过查看系统日志了解这一点
  • IIS/工作进程重新启动。 - 系统日志也会说明这一点
  • 应用程序域已重新启动。 - 我们需要监视perfmon 中的 ASP.NET 计数器的应用程序重新启动以检查这一点。应用程序重启的几个原因包括
    • 应用程序的bin文件夹被某些应用程序触及
    • Web.config 或 machine.config 被触摸
    • Global.asax 文件被触摸
  • 防病毒正在运行
  • 代码中的某些东西导致会话丢失,它可以是任何东西。您需要查看代码才能解决此问题。
  • 还有更多...

  • 根据您的选择,会话将从 会话超时 到期,作为用户 在特定时间段后,空闲也会导致会话超时 时间。

来源:MSDN Blog

【讨论】:

    【解决方案2】:

    会话是你应该尽可能避免的事情。它不能很好地扩展,并且不可靠。如果您确实使用 Session,它应该是短暂的,因为您无法保证一个会话对于 InProc 会话将保持活动多长时间。

    在任何情况下,会话都可以是超时或空闲,具体取决于您的设置。如果启用滑动超时,它实际上变成了空闲超时。如果您不启用滑动超时,则它是基于固定时间的超时。

    但是,同样,仅仅因为超时可能是 20 分钟,所以不能保证它会在 20 分钟内可用。

    【讨论】:

    • 谢谢,但如果我应该避免使用 Session,你推荐什么?
    【解决方案3】:

    asp.net 中的会话会在超时后过期,默认超时为 20 分钟 [msdn reference]。

    此超时是滑动超时,这意味着如果用户在这 20 分钟内显示任何活动,则倒计时再次从 20 分钟开始。因此,为了会话到期,用户应该闲置 20 分钟。

    您可以在 Web.config 的标签中更改此超时,如下所示。

         <sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" timeout="35">
           <providers>...</providers>
         </sessionState>
    

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2014-06-25
      • 2017-02-13
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      相关资源
      最近更新 更多