【问题标题】:Session expires very often in MVC application会话在 MVC 应用程序中经常过期
【发布时间】:2015-08-08 12:08:53
【问题描述】:

我正在开发 MVC5 应用程序。 我已经使用 session 来存储用户数据。

下面是我用来存储会话数据的代码

if (Session["UserData"] == null)
{
   Session["UserData"] = _objLoginSession;
}

我还在web.config中增加了Session Timeout,如下

<sessionState mode="InProc" timeout="60">
</sessionState>

我的认证方式也是none

<authentication mode="None" />

但是当我运行我的应用程序时,它只会在 1 - 2 分钟内过期。

有人可以指导我吗?

【问题讨论】:

    标签: asp.net-mvc session


    【解决方案1】:

    想到 ASP.NET 会话可能过期的一个原因是:会话数据保存在内存中,因为您指定了 InProc 模式,因此如果您在 Visual Studio 中重新编译应用程序或某些由于您的应用程序重新启动,您将丢失会话数据。您的应用程序可能会被 Web 服务器重新启动的原因有很多。诸如更改 web.config 或 bin 文件夹中的某些文件之类的事情,或者您的计算机开始在低内存上运行。

    所有这些原因表明,您绝对不应该(开发时除外)将会话数据保存在内存中 (InProc)。

    【讨论】:

    • 建议的方法是什么?
    • 永远不要在生产中使用InProc,在开发过程中请记住,如果您重新编译您的应用程序,您将丢失数据。如果您想通过应用程序重新启动保留会话数据,您还可以切换到开发中的一些持久会话存储。甚至更好:根本不使用任何会话。设计您的应用程序,使其完全无状态。我一直认为 ASP.NET 会话是不必要的。
    • 虽然 Darin 对无状态 Web 应用程序有意见,但它实际上并没有回答您的问题 - 为什么您的会话会过期。有些网站使用 InProc 会话工作多年而没有此类问题。如果您的会话真的过期了,那么很容易找出 - 在 Global.asax 文件的 Session_End 方法中放置一个断点。除了很容易发现的重新编译应用程序或更改 web.config 的问题外,还可以尝试使用无 cookie 会话(检查 的 cookieless 属性),以查看问题是否与您的浏览器有关。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多