gpt4 book ai didi

servicestack - 我们如何在 ServiceStack 中删除特定用户的 session ?

转载 作者:行者123 更新时间:2023-12-05 01:18:10 24 4
gpt4 key购买 nike

管理员可以禁用或暂停用户的入口。

我们可以在“用户登录”中检查“用户是否被禁用”。
(“为每个请求检查数据库”不是一个好的选择)

所以我们想在管理员禁用它的帐户时删除用户的 session 。

我们怎样才能实现它?

最佳答案

如果您知道或保留了 sessionId您可以使用以下命令从缓存中删除 session :

using (var cache = TryResolve<ICacheClient>())
{
var sessionKey = SessionFeature.GetSessionKey(sessionId);
cache.Remove(sessionKey);
}

但是 ServiceStack 不会保留所有用户 session ID 本身的映射。避免对每个请求进行数据库查找的一种方法是在禁用帐户时保留禁用用户 ID 的记录,您可以稍后在全局请求过滤器中验证该记录以确保用户未被锁定。

存储锁定用户 id 的最佳方法是在缓存中,这样锁定用户 id 的可见性和生命周期就在存储 session 的同一个缓存中。您可以使用自定义缓存键来记录锁定的用户 ID,例如:
GlobalRequestFilters.Add((req, res, dto) =>
{
var session = req.GetSession();
using (var cache = TryResolve<ICacheClient>())
{
if (cache.Get<string>("locked-user:" + session.UserAuthId) != null)
{
var sessionKey = SessionFeature.GetSessionKey(session.Id);
cache.Remove(sessionKey);
req.Items.Remove(ServiceExtensions.RequestItemsSessionKey);
}
}
});

这将在他们下次尝试访问 ServiceStack 时删除锁定的用户 session ,迫使他们再次登录,此时他们会注意到他们已被锁定。

一个新的 RemoveSession API 是 added in this commit这使它更好一点(来自 v4.0.34+):
if (cache.Get<string>("locked-user:" + session.UserAuthId) != null)
req.RemoveSession(session.Id);

关于servicestack - 我们如何在 ServiceStack 中删除特定用户的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com