0

我正在使用会话来传递变量,但在服务器上登录后会话在 2 -3 分钟后自动过期,可能是什么问题?

网络配置文件:

 <sessionState  timeout="1440" mode="InProc"></sessionState>
    <authentication mode="Forms">
        <forms name="School" loginUrl="Login.aspx" defaultUrl="default.aspx" 
               timeout="1440" slidingExpiration="true" protection="All" path="/" />
    </authentication>

我更改了超时,但它不起作用。

4

3 回答 3

1

如果应用程序池由于某种(可配置的)原因重新启动并丢失它的会话,则启用检查日志性能计数器。示例包括内存不足(如果您有共享的应用程序池,则更有可能),如果您每分钟有太多错误(可能是“隐藏”错误,例如由搜索引擎蜘蛛触发),或者您正在更改观察到的文件或观察到的文件夹(如或)。web.configbin\

根据您的会话“正常运行时间”要求,由于重新启动应用程序池将丢弃(“过期”)所有进程中的会话,您可以通过使用进程外会话状态存储(如ASP.NET/ Windows 状态服务/服务器SQL Server

如果您觉得这是 IIS 配置或服务器问题而不是代码问题,您可以随时询问ServerFault

于 2012-06-23T06:37:52.417 回答
0

将此添加到您的 Global.asax.cs

 protected void Session_Start(object sender, EventArgs e)
        {
            Session.Timeout = 240;
        } 
于 2012-06-23T07:27:49.887 回答
0

您的 Session 和 Forms 的超时设置看起来不错,但仍有许多事情可能会导致您认为 session 超时。我建议您按以下方式调查该问题:

网络设置:如果您的服务器是负载平衡的,请确保配置适用于会话。

应用程序池:检查 IIS 上的应用程序池刷新/重置规则。确保没有设置每 20 个请求或类似请求刷新一次池。

任务管理器:查看任务管理器,看看 IIS 工作进程是如何工作的(w3wp.exe)。它会被杀毒程序杀死吗?如果是这样,会话肯定会超时。

事件日志:最后,看一下 Windows 事件日志。查看是否有与超时相关的事件条目。

于 2012-06-23T06:39:24.937 回答