|
|
1
4
这个问题的答案是相当直截了当的,尽管这种行为确实令人困惑。 通常,MVC会在应用程序的会话状态锁上将所有请求同步到应用程序(因为MVC的http模块被标记为需要会话状态)。在我的场景中,应用程序在服务于主页之后重新启动。因此,当进入与主页相关的请求时,该会话id还没有会话状态,请求并行执行。 我看到5个并行请求,因为我是在XP上开发的,IIS的桌面版本被限制为5个并发请求。由于这些请求中的任何一个都不存在会话状态对象,因此每个请求都会创建一个新的会话状态对象并启动会话。其中四个请求转到MVC操作方法。由于这些请求需要会话状态,.NET尝试在请求完成后将创建的会话状态对象与备份存储同步。 只有第一次同步才能成功。NET简单地丢弃三个额外的会话状态对象,并为每个对象激发会话结束。NET不会尝试将第五个会话状态对象与备份存储同步,因为它是为标记为需要只读会话状态的异步http模块创建的。 因此,修复有两个部分:
(2) 我现在在字典里记下了参考书目。每次Session\u Start处理程序尝试添加会话id时,我都递增该计数;每次Session\u End尝试删除会话id时,我都递减该计数。一旦计数达到0,我就从字典中删除会话id。 |
|
|
2
1
|
|
|
3
0
我在开发一个旧的ASP.NET应用程序时遇到了这种情况-结果是,对于cookies,RequireSSL设置为True。。。当然,这意味着会话cookie不是由客户端保留/重新发布的(localhost,非SSL),因此后续请求创建了新会话。 |