ASP.Net会话变量 - 设置会话变量然后重定向

时间:2014-02-18 17:36:29

标签: asp.net session

enter image description here

以上简化了我的情况,但突出了我的困境 - 偶尔我的用户无法访问他们的会话变量(在会话超时之前)。我的配置如下:

  • 应用程序是.NET Framework 3.5
  • 会话状态由 StateServer (在Web服务器上本地运行)
  • 处理
  • 在Web服务器上运行的StateServer服务是.NET Framework 4.0
  • 只有一个网络服务器,它不是农场或花园情况

我在控制流中有一个页面,它将会话变量设置为自定义用户对象的实例(如果我将对象二进制序列化到文件系统,它们的大小可以在6kb到30kb之间,所以不小,但是也不是很大)。该应用程序通常最多只有10个并发用户。控制流中的后续页面,检查会话变量是否为空。如果会话变量为null,则假定会话已超时并且用户被重定向到“丢失的会话”页面。我已经(为了调试目的)在丢失的会话页面中放置了对同一会话对象的另一个检查。

我在日志中看到的内容非常奇怪 - 用户被发送到丢失的会话页面,但对象确实存在于会话中!会话变量是否可能在PageTwo.aspx上为null但在LostSession.aspx上不为null? PageTwo.aspx是否可能运行得太快 - 这意味着该对象尚未完全“写入”会话状态服务器?

关于我如何进一步调试的任何想法?

1 个答案:

答案 0 :(得分:0)

因为LostSession中存在用户对象,所以它也应该存在于PageTwo中。由于您使用重定向,因此过早访问数据应该没有问题。

您可以尝试在分配用户对象的行上的PageTwo中设置检查点,并手动查看会话对象。将其与PageOne和LostSession进行比较可能会让您了解导致问题的原因。

密钥可能包含拼写错误,因此用户对象设置为null,因为引用的密钥在会话中没有对象。