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自动过期. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |