几次window.open调用后,我的ASP.NET会话超时
我有一个ASP.NET应用程序,它使用StateServer会话模式,cookieless设置为false。在一些地方,会弹出一个指向另一个应用程序的窗口链接(该应用程序恰好位于同一个域中,但位于不同的虚拟目录中)。下面的步骤让我感到悲伤几次window.open调用后,我的ASP.NET会话超时,asp.net,session,cookies,internet-explorer-8,timeout,Asp.net,Session,Cookies,Internet Explorer 8,Timeout,我有一个ASP.NET应用程序,它使用StateServer会话模式,cookieless设置为false。在一些地方,会弹出一个指向另一个应用程序的窗口链接(该应用程序恰好位于同一个域中,但位于不同的虚拟目录中)。下面的步骤让我感到悲伤 启动弹出窗口 关闭弹出窗口 使用两个不同的参数将弹出窗口启动到与以前相同的应用程序 关闭弹出窗口 下一个请求=父窗口上的会话超时 使用无cookie会话解决了这个问题,所以我的cookie不知怎么会被浏览器弹出。除了使用无cookieless会话之外,如何解决
似乎只有当弹出窗口位于同一个域上时才会出现问题。如果我在其他地方弹出一个页面,就没有问题。是否有可能其他应用(在同一个域上)正在设置自己的cookie,覆盖您的主应用的cookie?您可以使用fiddler(或类似工具)查看哪些应用程序正在设置哪些cookie吗?检查您的应用程序的所有实例 Session.Clear(); Session.Abandon(); Session.Clear(); 会话。放弃(); 如果您根本不使用这些,那么很可能您的浏览器窗口被设置为不在用户之间共享会话。因此,新实例将获得一个新的会话cookie(因为它与前一个cookie的名称相同,所以它可能会杀死现有的会话cookie),就像在游戏中一样: 理想情况下,跟踪设置Cookie头出现在哪个页面。然后查看进入该响应的请求,看看是否发送了当前的ASP.NET_会话ID cookie。(小提琴手确实是最好的工具) 无论如何-这是一个尝试的开始。编辑显然这不是你的cookie名称,所以。。。 也许您应该在母版页上调用AJAX,在web应用程序上ping一个服务(或通用处理程序),以保持会话活动 JavaScript
window.setInterval(function() {
$.get('ping.ashx?nocache=' + (new Date()).getTime(), function() {
return true;
})
}, 30000);
在通用处理程序中,确保添加IRequireResessionState标记接口
也许您的会话cookie名称相同
在web.config中(对于其中一个应用程序),更改会话cookie名称
<sessionState
mode="StateServer"
timeout="20"
cookieName="DifferentASP.NET_SessionId"
会话超时设置为什么?无论设置为什么,这种情况都会立即发生吗?设置为60分钟,是的,无论我设置了多高/多低,这种情况都会发生。IE8也有同样的问题,我们也找不到解决办法。您的测试用例是可复制的,因为我们不能按需复制吗?我也有这个问题。我希望有人知道一个解决方案或解决办法。好吧,这适用于其他有这个问题的人。FWIW,在过去的两年中,我们已经对这个问题进行了至少一次修复,所以最初的问题可能已经得到了很长时间的修复。顺便说一句,你可以在不同的应用程序中为你的cookie设置不同的cookie域,以防止在你弄清楚哪个应用程序正在执行此操作后出现踩踏。请参见记住,除非您指定,否则domain.com将向sub.domain.com发送cookie