上述简化了我的情况,但更强调我的困境 - 偶尔我的用户是无法(会话超时之前好)来访问他们的会话变量。我的配置如下:
- 应用是.NET Framework 3.5的
- 会话状态由的StateServer处理(Web服务器上本地运行)的Web服务器上运行
- 的StateServer服务是.NET框架4.0
- 只有一个Web服务器,它不是一个农场或花园的情况
我控制的那台sessio流有一个页面n变量到一个自定义用户对象的实例(如果我将二进制序列化到文件系统的对象,它们的大小可以在6kb到30kb之间,所以不是很小但不是很大)。该应用程序通常最多只能同时拥有10个用户。控制流中的后续页面检查会话变量是否为空。如果会话变量为空,则假定会话超时并且用户被重定向到“丢失的会话”页面。为了进行调试,我放置了另一个对丢失会话页面中相同会话对象的检查。
我在日志中看到的内容非常奇怪 - 用户正在被发送到丢失的会话页面,但该对象确实存在于会话中!会话变量可能在PageTwo.aspx上为null,但在LostSession.aspx上不为null?是否有可能PageTwo.aspx运行得太快 - 意味着对象尚未完全“写入”Session StateServer?
关于如何进一步调试的任何想法?
浏览器特定的cookie问题,如IOS和IFrame内导航?当它发生时获取Fiddler跟踪并查看是否有错误发生在cookie上。 –
@AlexeiLevenkov - 这是一个很好的想法。我对Web服务器的访问权限有限,但我会请求设置一天左右的跟踪以查看是否可以捕获它发生的事情。我记录每个请求以及SessionID,我可以看到ID在所有三个请求中是一致的 - 这是否意味着cookie是好的或不一定? – mikey
如果您在服务器端的跟踪中看到相同的会话ID比cookies好...没有其他想法:( –