【问题标题】:ASP.NET session gets null unexpectlyASP.NET 会话意外变为空
【发布时间】:2014-08-09 17:33:27
【问题描述】:

我有一个简单的场景。在 asp.net 的一页中,我在会话中存储了一些值,例如

session("var") = "一些字符串" 要么 session("var1") = 通用字符串列表的对象

然后使用 response.redirect 转到另一个页面。 在其他页面上它显示的东西很好,但是当我们按下按钮对其执行操作时,会话变为空。

请记住,它并不总是会发生。只是有时它会这样做,而其他时候它工作得很好。我们经常这样做以将一些值从一个页面移动到另一个页面(通过将它们存储到会话中并转到其他页面)。我们有非常大的应用程序并且一切正常,但是从某些天开始,在某些用户的某些站点上一直存在此问题。再一次,它并不总是发生。 99% 可以正常工作,但有几次,我们遇到了会话变量不再可用的问题。

有没有办法知道哪里出了问题?我们确实在会话中存储了一些其他变量,当时它们看起来还不错。只有一些会话变量会丢失它们的值。

根据我的研究,人们似乎将责任归咎于 IIS 工作进程重启或应用程序池回收。但我相信在这种情况下,应用程序中的所有会话变量都必须作废,而不是选择少数。正确的?

另外,有没有办法在代码中知道池或工作进程是否重新启动?

谢谢 萨默斯

【问题讨论】:

  • 显示一些帮助代码
  • 默认会话时间为 20 分钟,如果您在 20 分钟后进行回发,它会自动变为空
  • “会话为空”是什么意思?这是否意味着会话对象本身为空,或者没有为特定键存储值?
  • “但是当我们按下按钮对其执行操作时,会话变为空” - 确保您没有在某处有条件地重置特定会话变量值。
  • 嘿,感谢您的所有 cmets。是的,我知道这些场景已经像错误地在其他地方更新会话变量或其他类似的事情。我保证它不会在任何地方发生。当我说 null 时,这意味着 session("xvariable") 为 null 或什么都没有。我只是将用户重定向到销售文件夹下的同一域下,这很奇怪。例如,用户选择了几个要删除的产品,我有一个确认页面。在确认页面上,选定的产品 ID(存储在会话中)不再可用(其为空或无)。这很奇怪,用户刚刚选择了它们,现在它消失了

标签: asp.net session


【解决方案1】:

也许您正在跨越域边界。会话由客户端 cookie 标识,通常存储在每个域的基础上。因此,例如,从www.whatever.comclient.whatever.com 的重定向将导致您丢失会话 ID,在您看来这将显示为“使会话无效”。所以,也要小心子域。从whatever.comwww.whatever.com 很好,但反过来,不行。

是的,除非您在网络场 IIS 上,否则重新启动工作进程将终止所有会话。除非您将它们存储在数据库或其他东西中。

【讨论】:

  • 如果是子域,在 web.config (system.web) 中设置 httpCookies 配置会有所帮助。您可以设置会话 cookie 对其有效的域。 domain=".stackoverflow.com" 也会使 session 可用于 stackoverflow 的子域。
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 2012-05-24
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多