c# - ServiceStack 心跳更新 session

标签 c# .net servicestack httpserver

在我的 ServiceStack 应用程序中有一个使用 ServerEventsFeature 的案例,我想在用户心跳期间更新 session \用户信息。

问题在于,在该功能中,OnHeartbeatInit 的处理程序将返回一个随机 ID,该 ID 未连接到我的 session 缓存中的任何 session ,例如,对于一个经过身份验证的客户端:

OnHeartbeatInit = req =>
{
    var userSession = req.GetSession();
    var sessionKey = SessionFeature.GetSessionKey(req.GetSessionId());
    //will be XXXXXXXXXXXXXXX
    var cache = Container.Resolve<ICacheClient>();
    var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
    var sessionKeys = cache.GetKeysStartingWith(sessionPattern).ToList();
    var allSessions = cache.GetAll<IAuthSession>(sessionKeys);
    var cacheSes = allSessions.FirstOrDefault().Key;
    //will be YYYYYYYYYYYYYYYY
}

那么有什么方法可以在心跳期间更新session\user吗?

最佳答案

如果您只是想更新单个 session ,您可以通过以下方式检索和更新 session :

OnHeartbeatInit = req =>
{
    var userSession = req.GetSession();
    userSession.LastModified = DateTime.UtcNow;
    req.SaveSession(userSession);
}

所有代码如下:

//will be XXXXXXXXXXXXXXX
var cache = Container.Resolve<ICacheClient>();
var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
var sessionKeys = cache.GetKeysStartingWith(sessionPattern).ToList();
var allSessions = cache.GetAll<IAuthSession>(sessionKeys);
var cacheSes = allSessions.FirstOrDefault().Key;

如果您有很多用户 session (尤其是在每次心跳时),则效率非常低,因为您正在查询和反序列化所有用户 session 。

关于c# - ServiceStack 心跳更新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763352/

相关文章:

c# - 使用 mongo C# 驱动程序在嵌入式文档中维护 Id 属性名称

c# - 是否可以订阅覆盖的基本事件?

c# - 在 .NET 中验证 XPath

c# - 元素列表错误后出现非法字符和缺失 ]

c# - 在 Windows/C# 上加速 Redis

C# 和 OpenSSL : Differing Output for AES Encryption

c# - 如何在字符串中找到匹配的一对大括号?

c# - 生成多个线程进行工作,然后等待所有线程完成

c# - 如何锁定系统?

使用数据库存储的 Api key 进行 ServiceStack 自定义凭据身份验证