我有一个使用StateServer会话模式cookie的设置为false ASP.NET应用程序。 在一些地方,有一个弹出一个窗口到另一个应用程序(这恰好位于同一个域,但在不同的虚拟目录)的链接。 下面的步骤给我的悲伤......
- 启动弹出
- 关闭弹出窗口
- 启动弹出窗口相同的应用程序像以前那样用几个不同的参数
- 关闭弹出窗口
- 下一个请求=上“父”窗口会话超时。
使用Cookie会话解决了这个问题,所以在某种程度上我的cookie被越来越浏览器whiped出来。 除了使用Cookie会话,这可怎么解决? 对于它的价值,我开发/与IE8测试。
编辑
似乎只有在弹出驻留在同一域中出现问题。 如果我在其他地方弹出一个页面,没有任何问题。
是否有可能在其他应用程序(在同一个域)被设定了自己的Cookie,并覆盖你的主要应用程序的? 您可以使用Fiddler(或类似工具),看看哪些饼干正在建立由哪些程序?
检查的所有实例的
Session.Clear();
Session.Abandon();
如果你不使用这些的话,那么它可能是您的浏览器窗口都设置为不共享之间的会话的情况。 因此,新的实例获得一个新的会话cookie(因为其相同的cookie名称作为前一个,它可能杀死现有的会话cookie) -在戏剧上: http://geekswithblogs.net/ranganh/archive/2009 /04/17/asp.net-session-state-shared-between-ie-tabs-and-ie8.aspx
理想的情况下追查其页面中的Set-Cookie头跨到来。 再看看要求进入该响应,看看你的当前ASP.NET_SESSIONID cookie被发送过来。 (小提琴手确实是这样做的最佳工具)无论如何 - 它开始尝试。
编辑显然,这不是你的cookie的名称,所以......也许你应该把你的母版页上的AJAX调用,关于你的web应用程序执行ping服务(或通用处理器),以保持会话活着。
JavaScript的
window.setInterval(function() {
$.get('ping.ashx?nocache=' + (new Date()).getTime(), function() {
return true;
})
}, 30000);
在通用处理程序,确保添加的IRequiresSessionState标记接口。
也许你的会话cookie的名字是相同的。
在你的web.config(用于应用之一)改变会话cookie名称。
<sessionState
mode="StateServer"
timeout="20"
cookieName="DifferentASP.NET_SessionId"