2014-02-18 197 views
4

enter image description hereASP.Net会话变量 - 设置会话变量,然后重定向

上述简化了我的情况,但更强调我的困境 - 偶尔我的用户是无法(会话超时之前好)来访问他们的会话变量。我的配置如下:

  • 应用是.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?

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

+1

浏览器特定的cookie问题,如IOS和IFrame内导航?当它发生时获取Fiddler跟踪并查看是否有错误发生在cookie上。 –

+0

@AlexeiLevenkov - 这是一个很好的想法。我对Web服务器的访问权限有限,但我会请求设置一天左右的跟踪以查看是否可以捕获它发生的事情。我记录每个请求以及SessionID,我可以看到ID在所有三个请求中是一致的 - 这是否意味着cookie是好的或不一定? – mikey

+0

如果您在服务器端的跟踪中看到相同的会话ID比cookies好...没有其他想法:( –

回答

0

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

您可以尝试在分配用户对象的行上的PageTwo中设置检查点,并手动查看会话对象。将它与PageOne和LostSession进行比较可能会给你一个线索是什么导致你的问题。

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

+0

谢谢@Will,“第2页”的代码中没有错别字。通过调试器运行它总是会产生预期的结果。在生产中运行时,它也可以运行99次。只有偶尔在生产环境中运行时才会出现此问题。我将日志记录添加到每个页面以确认行为。这与会话状态应该有效的文档/预期方式相反。当时间允许时,我正在考虑添加一个try/catch和一个简短的睡眠,以便在几秒钟后再次尝试。如果它仍然存在,我可能会重建服务器并再次监视它。 – mikey