如何在 web.config 中设置会话超时

Posted

技术标签:

【中文标题】如何在 web.config 中设置会话超时【英文标题】:How to set session timeout in web.config 【发布时间】:2010-11-15 09:42:11 【问题描述】:

我非常努力,但找不到解决方案如何为 ASP.Net Web 应用程序的进程内会话设置会话超时值。

我正在使用 VSTS 2008 + .Net 3.5 + C#。这是我自己写的将超时设置为1分钟,对吗?

我在web.config的system.web部分下写了

<sessionState timeout="1" mode="InProc" />

【问题讨论】:

你定义超时的方式是正确的。你有什么问题吗? 您知道这意味着它会在 1 分钟不活动后过期,而不是在开始后 1 分钟后过期?我的猜测是,如果你问这个问题,并且正确输入了超时时间,你可能会误解它是如何工作的。 我需要设置非活动时间,这正是我所需要的。谢谢伊万! 哈哈!我不建议将超时设置为 1 分钟。这会扼杀可用性! 我完全理解缩短超时时间的必要性。在我的例子中,如果会话超时,它会测试网站的可用性以及用户回来后它如何反应。除非会话超时很快发生,否则很难在调试的同时进行测试 【参考方案1】:

如果要将超时设置为 20 分钟,请使用以下内容:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

【讨论】:

20 分钟还是几小时? (超时="20") Config 以分钟为单位说明超时,所以 20 分钟【参考方案2】:

您在timeout 属性中设置的值是设置会话超时值的正确方法之一。

timeout 属性指定会话在被放弃之前可以空闲的分钟数。此属性的默认值为 20。

通过为该属性分配值 1,您已将会话设置为在其空闲后 1 分钟内放弃。

要对此进行测试,请创建一个简单的 aspx 页面,并在 Page_Load 事件中编写此代码,

Response.Write(Session.SessionID);

打开浏览器并转到此页面。将打印会话 ID。等待一分钟过去,然后点击刷新。会话 ID 将更改。

现在,如果我的猜测是正确的,您希望让您的用户在会话超时后立即注销。为此,您可以构建一个登录页面,该页面将验证用户凭据,并创建一个像这样的会话变量 -

Session["UserId"] = 1;

现在,您必须像这样在每个页面上检查此变量 -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

这是一个简单的例子,说明它是如何工作的。

但是,为了使您的生产质量安全的应用程序,使用 ASP.NET 提供的Roles & Membership 类。它们提供基于表单的身份验证,这比您尝试使用的正常基于会话的身份验证可靠得多。

【讨论】:

很好的建议...在使用 Response.Write(Session.SessionID); 进行测试之前,请务必先设置一个 Session 变量;否则每次刷新时它都会使用新 ID 刷新。【参考方案3】:

如果您使用 MVC,则将其放在 Web 应用程序根目录中的 web.config 文件中,而不是 Views 目录中的 web.config 文件中。它还需要在 system.web 节点中,而不是像 George2 在他的问题中所说的那样:“我在 web.config 中的 system.web 部分下编写”

超时参数值代表分钟。

还有其他可以在 sessionState 元素中设置的属性。你可以在这里找到信息:docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

然后,您可以通过添加以下方法在 Global.asax 文件中捕获新会话的开始:

void Session_Start(object sender, EventArgs e)

    if (Session.IsNewSession)
    
        //do things that need to happen
        //when a new session starts.
    

【讨论】:

【参考方案4】:

web.config中使用这个:

<sessionState 

  timeout="20" 
/>

【讨论】:

您不需要列出的大部分属性,真的只需要timeoutstateConnectionStringsqlConnectionStringmode="InProc" 时被忽略,modecookieless 的值设置为其默认值。所以,这真的可以归结为 Wolfwyrd 的答案。【参考方案5】:

如果它在web.config 中不起作用,则需要从 IIS 中进行设置。

【讨论】:

以上是关于如何在 web.config 中设置会话超时的主要内容,如果未能解决你的问题,请参考以下文章

会话超时在 IIS 7 中如何工作?

(C#)在Web.config中设置Session的超时时间没有反应,请教!有点急,先谢谢了!

在 Spring MVC 中设置会话超时

如何在 ktor 中设置会话超时?

在 web.config 中设置的当前文化

如何在 Laravel 中设置会话超时?