ASP.NET 会话超时问题

3
我有一个在我的ASP.net应用程序中很奇怪的场景。我使用ASP.net成员资格与自定义的"roleManager",并在web.config中使用以下标记,以限制没有"Keywords"(角色)角色的任何用户访问"Keywords"(路径)文件夹。
<location path="Keywords">

<system.web>

<authorization>

<allow roles="Keywords"/>

<deny users="*" />

</authorization>

</system.web>

</location>

如果允许某个拥有其他角色的用户评估此URL(在这种情况下是关键字),则会重定向到自定义的“访问被拒绝”页面。

现在一切正常,但是当我将应用程序保持不活动状态30分钟后,我无法访问“关键字”,每次都会结束于自定义的“访问被拒绝”页面,如果我关闭浏览器,重新登录,它就能正常工作。

请在此情况下帮助我。

提前感谢您


你正在使用FormsAuthentication进行登录吗?如果是的话,你是否检查了用户的cookie是否重新加载?http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.aspx - Pieter Germishuys
2个回答

2

ASP.NET会话默认在20分钟后超时。

你可以通过在Web.config中指定更长的时间(以分钟为单位)来延长超时时间:

<system.web>
    <sessionState timeout="60"/>
    ...
</system.web>

如果您通过表单进行身份验证,应将身份验证cookie超时值提高到匹配的时间。

此外,请记住,在运行站点时在IIS下,您应该将应用程序池的空闲超时时间延长到类似的时间。如果不这样做,您的ASP.NET站点的HttpApplication实例将被卸载,销毁任何活动会话。


我已经在我的webconfig中添加了<sessionState mode="InProc" cookieless="false" timeout="30"/>,并在<authentication mode="Forms">元素内设置了timeout="365"。一切都正常工作,但当我将会话保持打开超过30分钟时,它不允许我访问那些我在location标记中设置了<deny users="*" />的页面,但是当我尝试使用<deny users="?" />进行设置时,它可以正常工作。我需要<deny users="*" />,因为它将限制任何没有角色的用户访问我的文件夹。 - chandrabhan singh
你为什么期望会话在超时值之后仍然能够正常工作呢? - Quick Joe Smith
Joe,首先感谢您上次的快速回复,我忘记了感谢您!当我的会话超时时,如果用户单击任何链接(服务器请求),她将被重定向到登录页面,在提供凭据后,我使用Request.QueryString["ReturnUrl"]将她重定向回她正在工作的页面。但是,当她再次登录时,即使在同一IE浏览器中的新标签页中,她也会收到我的自定义访问被拒绝页面,无法访问该页面,她必须关闭窗口! :-( - chandrabhan singh

0
通常,要做的第一件和最简单的事情就是更改配置/system.web/sessionState@timeout的值,例如“90”。
<sessionState timeout="90" />

它仍然在20分钟后超时。 *这没有任何意义,它明确表示会话超时应该是90分钟。*

这里有几个相关的问题:

  1. 应用程序池的工作进程默认空闲超时也设置为20分钟
  2. 存储会话状态的默认模式是在IIS进程中

可以通过单击分配给应用程序的应用程序池上的属性(IIS 6)或高级设置(IIS 7.5)来找到应用程序池的设置。

确保“空闲超时(分钟)”的值设置为您的会话超时时间,至少为90(例如),以确保所有会话持续整个会话超时期间。

如果仍然存在问题,请尝试此解决方案,如果仍有问题,请参考本文,其中提供了更多可尝试的选项。

http://asp-net.vexedlogic.com/2012/05/23/aspasp-net-session-timeout-how-do-i-change-it/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接