以上简化了我的情况,但突出了我的困境 - 偶尔我的用户无法访问他们的会话变量(在会话超时之前)。我的配置如下:
我在控制流中有一个页面,它将会话变量设置为自定义用户对象的实例(如果我将对象二进制序列化到文件系统,它们的大小可以在6kb到30kb之间,所以不小,但是也不是很大)。该应用程序通常最多只有10个并发用户。控制流中的后续页面,检查会话变量是否为空。如果会话变量为null,则假定会话已超时并且用户被重定向到“丢失的会话”页面。我已经(为了调试目的)在丢失的会话页面中放置了对同一会话对象的另一个检查。
我在日志中看到的内容非常奇怪 - 用户被发送到丢失的会话页面,但对象确实存在于会话中!会话变量是否可能在PageTwo.aspx上为null但在LostSession.aspx上不为null? PageTwo.aspx是否可能运行得太快 - 这意味着该对象尚未完全“写入”会话状态服务器?
关于我如何进一步调试的任何想法?
答案 0 :(得分:0)
因为LostSession中存在用户对象,所以它也应该存在于PageTwo中。由于您使用重定向,因此过早访问数据应该没有问题。
您可以尝试在分配用户对象的行上的PageTwo中设置检查点,并手动查看会话对象。将其与PageOne和LostSession进行比较可能会让您了解导致问题的原因。
密钥可能包含拼写错误,因此用户对象设置为null,因为引用的密钥在会话中没有对象。