ASP.NET会话超时无效,除非cookieless=true。

问题描述 投票:0回答:1

我试图在我的应用程序中配置会话超时。

当我在web.config文件中放入以下代码时,它工作正常。

<sessionState cookieless="true" timeout="1" />

也就是说,我可以看到我的会话在1分钟后超时。 然而,这段代码有一个副作用,就是把session id放在url中,这是不可取的。

另一方面,如果我在web.config中使用下面的代码,会话至少在1小时或更长时间内不会超时。

<sessionState cookieless="false" timeout="1" />

为了确定会话是否真的超时,我在我的_Layout.cshtml中使用了以下代码。

@if (Session[MvcApplication._Ssn_UserName] == null)
{
    Response.Redirect("~/Login/Index");
}

当超时工作时,我看到用户被重定向到我的登录页面,只要他们导航到不同的页面,或者只是点击浏览器的刷新按钮。

当我从Visual Studio(IIS Express)或在IIS上运行时,我看到同样的行为。

我在网上做了很多搜索,没有发现无cookiel设置和超时行为之间的任何关联。 如果有任何想法,将不胜感激。

asp.net iis web-config
1个回答
0
投票

试着使用下面建议的iis会话状态设置。

1)打开iis,选择你的网站。

2)选择会话状态功能

3)根据自己的选择设置模式和cookie设置。

enter image description here

会话超时值不能高于20分钟(特殊情况除外),因为每一个打开的会话都会保留内存。也不能低于4分钟,因为客户端很少在这个时间内响应,导致会话状态的丢失,所以尽量设置为5分钟或以上。

确保没有其他的会话超时设置与此设置冲突,如 global.asax 文件设置或代码隐藏超时设置。

尽量将iis应用池的理想超时设置与会话超时设置相同。

进入网站的应用池--> 进入高级设置--> 进程模型--> 改变Idle Time-out。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.