【问题标题】:What can destroy a session object asp .net?什么可以破坏 asp .net 中的会话对象?
【发布时间】:2014-08-30 12:05:38
【问题描述】:

我在 ASP .NET/C# MVC 中使用 Session[""] 对象。我对它们做了很多检查,但我问自己,如果没有指定会话对象,什么会破坏它?

我想确保这些Session[""] 在某些过程中保持不变,并且只能通过我的指示或用户退出应用程序才能清除。

【问题讨论】:

  • InProcSessionState Service ?
  • Web 服务器可以随时停止会话,基本上。通常这发生在可配置的超时时间过后。 (我相信默认值是 20 分钟。)如果您需要这些数据在 Web 服务器的突发奇想之外持续存在,您不应该将您的应用程序耦合到该 Web 服务器。相反,将数据保存在您可以控制的地方。
  • InProc 会话状态在负载下也非常不稳定。每次应用程序域重启 Session 状态丢失,进程重启会导致 Session 状态数据丢失,如果 Session 状态中存储了大量数据,进程的内存消耗可能会增加到因内存过高而出现问题的程度.因此,应尽可能限制 Session 状态中存储的数据量以及需要存储这些数据的时间范围。

标签: c# asp.net asp.net-mvc session


【解决方案1】:

如果您使用的是InProc,那么有很多事情可以杀死会话状态。例如

  • 超时(可以在配置中设置)
  • AppPool 回收
  • Web.Config 更改
  • 服务器崩溃

如果您需要更持久的解决方案,请阅读 this articlethis article 也有一些替代方案。

【讨论】:

  • 当应用程序共享一个应用程序池时会更好。一个应用程序得到更新,所有其他应用程序都被重置。
【解决方案2】:

这取决于您使用的会话状态类型。

InProc - 如果 Web 服务器进程关闭或崩溃,会话将被销毁。默认关闭时间是 IIS 应用程序池处于活动状态后 20 分钟。如果 IIS 应用程序池达到其内存限制,它也会关闭,因此这是最不推荐的会话状态管理方法。

StateServer - 会话存储在服务器上的单独服务中。会话将保持活动状态,直到此服务关闭或不可用。它比 InProc 更可靠,但如果服务关闭,您会丢失任何会话数据。

SQLServer - 会话存储在 SQL 数据库中。这是最强大的解决方案,在您销毁会话之前基本上可以保证会话,但它的设置也是最复杂的,需要 SQL 服务器和数据库。

自定义 - 您必须指定的其他一些存储会话的方法。

可以在下面的链接中找到有关该主题的更多信息。

http://msdn.microsoft.com/en-us/library/vstudio/ms178581%28v=vs.100%29.aspx http://msdn.microsoft.com/en-us/library/vstudio/system.web.sessionstate.sessionstatemode%28v=vs.100%29.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多