【问题标题】:Losing session after file changed / uploaded文件更改/上传后丢失会话
【发布时间】:2015-02-17 08:37:48
【问题描述】:

我目前在会话方面遇到了一个奇怪的问题,我使用 MVC 已经有一段时间了,在以前的版本中从未遇到过这个问题。目前第一次使用MVC5做一个新系统,一切都很好。会话设置没有问题,但是,如果我在 VS 中修改 cshtml 文件,我的会话将被终止。

我还有一个文件上传功能,但是当你上传一个文件然后导航到另一个页面时,会话又消失了。这可以在本地运行,也可以在我们用于沙盒的 Windows Server 机器上运行。

新版本的 MVC 对会话有什么改变吗?我以前从未有过这个。我已将其设置为使用进程内会话,通常不需要更改任何内容,但为了使用无 cookie、使用 cookie 等作为选项,我已经设置好了。似乎没有任何效果。

如果有人有一个很棒的想法。

【问题讨论】:

  • 至于cshtml 文件的修改 - IIS 需要重新编译视图,此时会话被终止也就不足为奇了,因为(可能)应用程序池已重置。您上传的文件是什么,它们去了哪里?我有很多关于最新 MVC 的项目,并且文件上传没有问题。
  • 我认为这是两个相同的问题。它们是 PDF 文件,它们位于“内容”文件夹内的文件夹中。似乎每次修改/添加/删除/等文件时都会进行新的编译。尽管它在 MVC 4 中从未这样做过,但我的代码几乎完全相同。 MVC 从什么时候开始编译 Views?
  • MVC 总是编译视图 - 在第一次点击页面时,它编译视图并缓存二进制文件。您可以使用预编译的视图进行部署,并且不会受到“首次命中惩罚”。真正的问题是“MVC 何时开始失去视图编译会话?”我猜这取决于会话配置 - 如果您将会话数据配置为在 IIS 之外持久保存,您的会话将不会在应用程序池回收时被终止。
  • 所以解决方法是重新配置会话。并且不要将文件保存到“内容”文件夹中。
  • 我可以理解,如果它在 MVC 4 中做了同样的事情,但它没有。

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


【解决方案1】:

有趣的是,您之前没有观察到这一点 - 与往常一样,当您更新网站的内容时,IIS 可能会重新编译声明性资源,从而导致应用程序池重新启动,从而有效地删除存储在内存中的所有会话数据。

一个解决方案是切换到其他持久会话存储,sql 可能是最容易配置的。您只需要一个运行创建会话数据库的脚本的 sql server:

http://support.microsoft.com/kb/317604

另一种选择是使用状态服务器:

http://msdn.microsoft.com/en-us/library/ms178586.aspx

State Server 的性能通常优于 SQl Server,因为数据不会持久化到磁盘上。但是,由于状态服务器是一个单独的进程,因此即使应用程序池重新启动,您的应用程序服务器也不会丢失会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多