我想在他的会话超时时注销用户.所以在Global.asax中使用以下代码:
protected void Session_End(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
}
Run Code Online (Sandbox Code Playgroud)
但似乎session_end
永远不会开火.任何想法如何解决它?我正在使用ASP.NET默认设置.
pol*_*h.o 43
您可以在Session_Start中设置一些会话数据.如果没有这个,Session_End将不会被触发.看到这个
此处另一个非常重要的事项是,如果您不在会话中保存任何内容,则Session_End事件将不会触发.会话中必须至少保存一次用于触发Session_End事件的内容.这也意味着如果您在第一个请求中保存会话并在同一请求中放弃会话,则Sesison_End事件将不会触发,因为会话中没有任何内容保存.
在web.config中,您需要将sessionState元素作为元素的子元素
<configuration>
<system.web>
<sessionState mode="InProc" />
.....
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我不知道这是一个功能还是bug.或者可能是我在ASP.NET中没有理解足够的会话管理.但这就是我发现的.
如果未声明Session_Start,则Session_End不会在ASP.NET MVC 4中触发(在web.config中具有sessionState元素的默认设置).
所以你需要声明Session_Start来捕获Session_End :)
protected void Session_Start(Object sender, EventArgs e) { }
protected void Session_End(Object sender, EventArgs e) {
Debug.WriteLine("End. " + Session.SessionID);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44952 次 |
最近记录: |