ServiceStack 心跳更新会话
ServiceStack update session on heartbeat
我的 ServiceStack 应用程序中有一个使用 ServerEventsFeature
的案例,我想在用户心跳期间更新 session\user 信息。
问题在于,在该功能中,OnHeartbeatInit
的处理程序将 return 一个随机 ID,该 ID 未连接到我的会话缓存中的任何会话,例如,对于一个经过身份验证的客户端:
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 吗?
如果您只是想更新单个会话,您可以通过以下方式检索和更新会话:
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;
如果您有很多用户会话(尤其是每次心跳),则效率非常低,因为您正在查询和反序列化所有 用户会话。
我的 ServiceStack 应用程序中有一个使用 ServerEventsFeature
的案例,我想在用户心跳期间更新 session\user 信息。
问题在于,在该功能中,OnHeartbeatInit
的处理程序将 return 一个随机 ID,该 ID 未连接到我的会话缓存中的任何会话,例如,对于一个经过身份验证的客户端:
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 吗?
如果您只是想更新单个会话,您可以通过以下方式检索和更新会话:
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;
如果您有很多用户会话(尤其是每次心跳),则效率非常低,因为您正在查询和反序列化所有 用户会话。