加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何处理会话保持打开状态

发布时间:2020-12-15 08:43:24 所属栏目:百科 来源:网络整理
导读:我正在实现一个会话结构. 我在服务器端有一个ConcurrentDictionary,持有所有 SessionId,UserSession对. 建立新连接时,会根据RememberMe选项将cookie分配给客户端浏览器,perm或temp. 当客户端调用LogOut函数时,它会从字典中删除会话. 但是,当客户端浏览器被简
我正在实现一个会话结构.

我在服务器端有一个ConcurrentDictionary,持有所有< SessionId,UserSession>对.

建立新连接时,会根据RememberMe选项将cookie分配给客户端浏览器,perm或temp.

当客户端调用LogOut函数时,它会从字典中删除会话.

但是,当客户端浏览器被简单地关闭或崩溃,并且cookie丢失或过期或删除时,内存中的服务器端会话对象将保留在字典中并变为重影.随着时间的推移,这些鬼魂会堆积起来.

我的问题是,如何改进设计,以便在死亡会话过期后将其清理干净?

我想过让计时器服务运行一个清洁计划,但感觉不优雅.有没有更简单的方法来做到这一点,而不依赖于外部服务?

解决方法

我的一个项目有类似的情况.

而不是字典,我使用短暂的绝对过期缓存和用户的会话ID作为我的缓存键:

HttpContext.Current.Cache.Insert(sessionID,userEntity,null,DateTime.Now.AddSeconds(30),TimeSpan.Zero);

在客户端,我每隔15秒进行一次ajax调用,通知服务器并更新该会话ID的缓存.

因此,每当用户关闭其浏览器窗口时,服务器都不会收到任何通知和用户的会话ID自动过期.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读