如何在 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"
/>
【讨论】:
您不需要列出的大部分属性,真的只需要timeout
。 stateConnectionString
和 sqlConnectionString
在 mode="InProc"
时被忽略,mode
和 cookieless
的值设置为其默认值。所以,这真的可以归结为 Wolfwyrd 的答案。【参考方案5】:
如果它在web.config
中不起作用,则需要从 IIS 中进行设置。
【讨论】:
以上是关于如何在 web.config 中设置会话超时的主要内容,如果未能解决你的问题,请参考以下文章