经过几次window.open叫我的ASP.NET会话超时(After a few window.o

2019-08-16 16:09发布

我有一个使用StateServer会话模式cookie的设置为false ASP.NET应用程序。 在一些地方,有一个弹出一个窗口到另一个应用程序(这恰好位于同一个域,但在不同的虚拟目录)的链接。 下面的步骤给我的悲伤......

  1. 启动弹出
  2. 关闭弹出窗口
  3. 启动弹出窗口相同的应用程序像以前那样用几个不同的参数
  4. 关闭弹出窗口
  5. 下一个请求=上“父”窗口会话超时。

使用Cookie会话解决了这个问题,所以在某种程度上我的cookie被越来越浏览器whiped出来。 除了使用Cookie会话,这可怎么解决? 对于它的价值,我开发/与IE8测试。

编辑

似乎只有在弹出驻留在同一域中出现问题。 如果我在其他地方弹出一个页面,没有任何问题。

Answer 1:

是否有可能在其他应用程序(在同一个域)被设定了自己的Cookie,并覆盖你的主要应用程序的? 您可以使用Fiddler(或类似工具),看看哪些饼干正在建立由哪些程序?



Answer 2:

检查的所有实例的

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被发送过来。 (小提琴手确实是这样做的最佳工具)无论如何 - 它开始尝试。



Answer 3:

编辑显然,这不是你的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"


文章来源: After a few window.open calls my ASP.NET session times out