使用ss-id
ServiceStack会话cookie,当用户使用相同帐户创建了太多会话时,我正在跟踪用户的会话并撤消该会话。
我有一个实现以下接口的CustomCredentialsAuthProvider:
public interface IUserSessionSource
{
IAuthSession GetUserSession(string userAuthId);
}
每当我的一个API在我的Auth API中调用GetUserSession
时,我都会使用以下代码来尝试获取ss-id
cookie的值:
public IAuthSession GetUserSession(string userAuthId)
{
IRequest req = HostContext.TryGetCurrentRequest();
IAuthSession session = req.GetSession();
}
这在我运行我的API本地主机时有效。在将我的API部署到Docker容器中后,HostContext.TryGetCurrentRequest()
始终返回null。
我正在Linux(CentOS发行版)Docker容器中运行.NETCore。
有人猜测为什么HostContext.TryGetCurrentRequest在Docker容器内部失败?
是否有更可靠的替代方法来将HTTP请求中包含的ss-id
cookie值获取到我的Auth API?
答案 0 :(得分:2)
HostContext.TryGetCurrentRequest()
仅在允许在运行时访问HttpContext的主机中可用,默认情况下,这是经典的ASP.NET Framework Apps。
理想情况下,您应该避免使用对请求上下文的单例访问,而应从服务中的base.Request
传递它,但对于.NET Core应用程序,您应该在启动ConfigureServices()
中can register HttpContextAccessor,但它会导致性能下降:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();