16

我有一个带有 razor 视图引擎的 Asp.net Mvc 应用程序,其中我使用了一个变量Session['user']:当用户登录应用程序Session['user'] = login并在注销时,此变量将作为值Null

问题是有一个短暂的超时并且会话变量过期:如果我在Session['user'] =null自动登录应用程序后一分钟内什么都不做。

那么如何设置会话变量的超时无限,直到它被程序更改?有什么建议吗?

4

5 回答 5

31

那么如何设置会话变量的超时无限,直到它被程序更改?有什么建议吗?

您不能将timeout值设置为无限制。

您可以使用web.config中元素的timeout属性以分钟为单位增加超时值。sessionState


会话状态设置

默认情况下,ASP.NET 使用 cookie 来识别哪些请求属于特定会话。如果 cookie 不可用,可以通过将会话标识符添加到 URL 来跟踪会话。要禁用 cookie,请设置sessionState cookieless="true". (120 = 分钟)

<sessionState mode="StateServer" cookieless="false" timeout="120"/>

查看此会话超时

于 2013-07-19T09:04:58.467 回答
14

您不能将其分配给无限。您可以使用会话状态元素的超时属性以分钟为单位增加值web.config

<sessionState timeout="30">
</sessionState>

默认会话超时值为 20 分钟。同样在您的情况下,如果您使用表单身份验证,请检查身份验证超时值

<authentication mode="Forms">
   <forms loginUrl="logon.aspx" 
   protection="All" path="/" timeout="30" />
</authentication>  
于 2013-07-19T08:54:31.620 回答
8

这是会话的超时,而不是变量。在几分钟内将其设置为配置

<sessionState timeout="30" />
于 2013-07-19T08:54:43.417 回答
8

无法将会话超时设置为无限制。
而是将会话超时设置为较高的值。
例子:

<configuration>
  <system.web>
    <sessionState mode="InProc" timeout="350" />
  </system.web>
</configuration>
于 2015-07-28T20:20:13.247 回答
1

我之前遇到过类似的问题,这与会话超时值无关。因此,有时它现在是关于超时时间的。此会话超时可以设置为 20 分钟或更长时间,但如果托管服务器或您的计算机的内存非常。然后清除会话值,用户有时必须再次登录。

这种低内存有时是由在数据库中存储图像二进制值而不是作为文件存储在服务器上并使用 System.IO.File 过程访问它们引起的。因此,当您尝试获取一些记录时,它们在 TABLE 上的 IMAGES DATA 也将被获取,从而导致性能显着降低以及可用内存的过度消耗。

可能是您的计算机或主机的内存(不是存储空间)非常低

希望这可以帮助。

于 2019-08-09T11:52:41.007 回答