Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在asp.net mvc中订阅SessionStateItemExpireCallback_Asp.net Mvc_Session State - Fatal编程技术网

Asp.net mvc 如何在asp.net mvc中订阅SessionStateItemExpireCallback

Asp.net mvc 如何在asp.net mvc中订阅SessionStateItemExpireCallback,asp.net-mvc,session-state,Asp.net Mvc,Session State,我对此搜索了很多,但找不到任何实际使用的具体例子。MSDN对实现自定义会话状态提供程序说了很多,但我不想这么做。有人能告诉我在会话过期时如何执行一些操作吗 用例: 会话超时10分钟。 用户打开一个页面并创建会话。应用程序将数据库中的用户标记为已登录。页面打开后一分钟,用户关闭浏览器,所以9分钟后会话将过期,应用程序应执行一些代码,将用户标记为脱机 提前谢谢 您可以尝试在Global.asax中订阅会话结束事件: protected void Session_End() { ...

我对此搜索了很多,但找不到任何实际使用的具体例子。MSDN对实现自定义会话状态提供程序说了很多,但我不想这么做。有人能告诉我在会话过期时如何执行一些操作吗

用例: 会话超时10分钟。 用户打开一个页面并创建会话。应用程序将数据库中的用户标记为已登录。页面打开后一分钟,用户关闭浏览器,所以9分钟后会话将过期,应用程序应执行一些代码,将用户标记为脱机


提前谢谢

您可以尝试在Global.asax中订阅会话结束事件:

protected void Session_End()
{
    ...
    // Remark: don't use Context here, it will be null as the
    // user might have closed his browser long ago => no request/response
    // You could get the corresponding Session.SessionID though
}
您应该注意,只有在使用InProc会话时才会触发此事件。在SqlServer和StateServer模式下,不会调用此事件,因为在其相应会话状态提供程序的实现中,SetItemExpireCallback方法只返回false.:

内置会话的状态如何 提供者处理过期回调? 进程内会话状态提供程序, InProcSessionStateStore,存储 ASP.NET中的会话内容 应用程序缓存并利用 缓存的滑动过期时间 用于在会话终止时终止会话的功能 去一段特定的时间 没有被访问。当 通过缓存通知提供者 删除一个会话 已从缓存中过期,它会通知 会话状态模块,以及 SessionStateModule触发会话\u结束 事件另外两个是内置的 提供程序OutOfProcSessionStateStore 和SqlSessionStateStore不支持 过期回调。两者都返回 SetItemExpireCallback中的false。 OutOfProcSessionStateStore使用 用于存储会话的应用程序缓存, 但由于会话数据存储在 远程处理状态服务器 进程,则提供程序不会尝试 通知SessionStateModule时 会话过期。SqlSessionStateStore 依赖SQL Server代理来 清除会话状态数据库 并清理过期的会话。有 代理通知提供者有关 已过期的会话,因此无法访问提供程序 可以反过来通知 SessionStateModel将是一个棘手的问题 特别是在网络上 农场


如果要实现自己的会话状态提供程序,如何将其分配给应用程序,以便不使用默认的会话状态提供程序?@Dmitry Elkin,这是通过在web.config中指定mode=Custom和自定义提供程序的类型来实现的。以下文章末尾给出了一个示例: