【发布时间】:2023-03-05 04:24:01
【问题描述】:
全部:
我一直在寻找这个问题的答案,如果这是一个骗局,请原谅我,我似乎找不到正确的答案。
假设您有一个标有 [SessionState(SessionStateBehavior.Disabled)] 的 ASP.NET MVC 控制器 属性。在此控制器上调用操作是否“刷新”会话状态,使其保持“活动”?具体来说,我有一个 AJAX 请求调用控制器以保持会话“活动”,因为该应用程序是由 javascript 驱动的单页应用程序,并且我不希望用户会话终止,所以每 30 秒我会调用一次到这个控制器。同样,如果控制器被标记为 SessionStateBehavior.ReadOnly,它会保持活动状态吗?最后,为此目的使用 ASP.NET MVC 控制器不是最好的方法(有没有更好的方法)?
谢谢!
【问题讨论】:
-
我不明白为什么您觉得需要每 30 秒进行一次 ajax 调用。会话状态超时通常设置为至少 10 分钟,通常为 20 或 30 分钟。但是,我建议您重写应用程序以不依赖会话状态保持活动状态,因为 IIS 可以随时重置会话。超出您的控制范围(内存条件、应用程序池回收、异常、月相等)。相反,将您需要的任何状态保存在某处,如果自用户上次访问以来会话已超时,则重新加载它。
-
在大多数情况下,我会同意,但在当前应用程序中,需要在后台为当前用户保留一个非常大的数据集。我真的无法详细说明它,但我同意你的观点,99% 的时间你都希望应用程序无会话。
-
如果数据非常大,那就更需要不依赖会话了。当内存变得紧张时,IIS 将随机终止会话。如果会话中有大量数据,那将保证出现奇怪的、难以重现的问题。