【发布时间】:2018-11-20 14:35:48
【问题描述】:
我必须跨多个用户和多个浏览器实现会话处理。每个用户都有一个唯一的令牌,我将其保存在 Global.asax.cs 方法的 Session__Start() 内的 HttpContext.Current.Session 变量中。它对于单个会话非常有效。但是,当我从两个浏览器发出请求时,然后在浏览各个页面时,有时 Session_Start() 方法会自动为第二个会话调用并重置会话变量,从而导致空值.
我应该如何处理这种情况?
编辑 1: 会话可能超时的情况有哪些?例如:在 HTTPGet/HttpPost 之间切换,或者进行 Ajax 调用?
我还阅读了此链接: Does Session timeout reset on every request
这是我应该记住的吗?我的代码有 2 个 GET 和 1 个 POST 请求,并且会话变量在第二个浏览器会话的 POST 方法中变为 NULL。
【问题讨论】:
-
定义“两个浏览器”。
-
我尝试了 firefox 和 chrome,因为我想测试多个同时活动的会话。但是我正在寻找跨用户的多个会话,这些用户没有登录但只是正常使用网络应用程序。
-
每个浏览器都将自己处理会话。在浏览器中,会话是特定于实现的,但一般来说会话是在选项卡之间共享的(不包括“私人浏览会话”)。这是由于通过 cookie 跟踪会话。 Cookie 绑定到(远程)域,而不是浏览器选项卡/窗口,因此当您打开同一个站点的新选项卡时,相同的 cookie 会被提交到远程服务器。
-
我知道同一个浏览器中的不同标签页共享cookies,但是不同的浏览器窗口呢,例如:1个Firefox窗口和1个Chrome窗口?
-
我找到了原因。 web.config 文件中的 sessionState 模式设置为“InProc”,而应设置为“StateServer”。当我做出必要的改变时,它就像一个魅力。 ASP.net 状态服务也应该从 services.msc 启动才能正常工作。
标签: c# session model-view-controller