我有一个使用StateServer会话模式的ASP.NET应用程序,其中cookieless设置为false。在一些地方,有一个链接会弹出一个窗口到另一个应用程序(它恰好位于同一个域,但位于不同的虚拟目录中)。以下步骤让我感到悲伤......
使用无Cookie会话解决了这个问题,所以我的cookie在某种程度上被浏览器搞砸了。除了使用无cookie会话,如何解决这个问题?对于它的价值,我正在开发/测试IE8。
修改
似乎问题只发生在弹出窗口位于同一个域上时。如果我在其他地方弹出一个页面,则没有问题。
答案 0 :(得分:1)
是否可能其他应用(在同一个域上)设置自己的Cookie,覆盖主应用的cookie?您可以使用fiddler(或类似工具)查看哪些应用程序设置了哪些Cookie?
答案 1 :(得分:0)
检查
的所有实例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是否已发送。 (提琴手确实是最好的工具) 无论如何 - 它是一个尝试的开始。
答案 2 :(得分:-1)
编辑显然这不是你的cookie名称,所以...... 也许你应该在你的主页面上进行一次AJAX调用,在你的web应用程序上ping一个服务(或通用处理程序),以使会话保持活动状态。
JavaScript
window.setInterval(function() {
$.get('ping.ashx?nocache=' + (new Date()).getTime(), function() {
return true;
})
}, 30000);
在Generic Handler中,确保添加IRequiresSessionState标记接口。
也许你的会话cookie名称是相同的。
在您的web.config中(对于其中一个应用程序)更改会话cookie名称。
<sessionState
mode="StateServer"
timeout="20"
cookieName="DifferentASP.NET_SessionId"