gpt4 book ai didi

asp.net-mvc - User.Identity.IsAuthenticated 注销 asp.net mvc 后为真

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

我有一个循环的函数,它在每个循环结束时休眠 6 秒
Thread.Sleep(TimeSpan.FromSeconds(6));这会循环 10 次,即函数运行 60 秒,每次暂停 6 秒。

我在循环开始时进行身份验证测试

 if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
return null;
}

所以每次它首先进行身份验证然后运行并等待 6 秒。

这是我的功能:
while (counter < 10)

{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
return null;
}

// doing stuff

Thread.Sleep(TimeSpan.FromSeconds(6));
counter++;
}

现在用户同时注销(比如第 15 秒)。我使用 ajax 注销,因此不想重定向我的页面。即使在注销后 IsAuthenticated 对于所有 10 个循环始终为真,并且仅在重新执行此函数时为假

对于注销,我使用:
FormsAuthentication.SignOut();
Session.Abandon();
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
HttpCookie cookie = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}

但它仍然是真的..
我想在用户注销后立即停止执行我的线程

最佳答案

这是因为 IsAuthenticated有一个内部缓存,因为一次又一次地进行这种身份验证太耗时了。所以在你的循环中并且不离开页面,IsAuthenticated不是变化。

另一方面,这是什么意思?在循环中,用户可以看到前 4 个想法,然后看不到其余部分,因为不再经过身份验证?没有意义。

如果您想检查用户是否已离开并离开页面,您可以做的是检查其他一些参数。

这是显示此内部缓存的代码。

public virtual bool IsAuthenticated
{
get
{
if (this.m_isAuthenticated == -1)
{
WindowsPrincipal principal = new WindowsPrincipal(this);
SecurityIdentifier sid = new SecurityIdentifier(IdentifierAuthority.NTAuthority, new int[] { 11 });
this.m_isAuthenticated = principal.IsInRole(sid) ? 1 : 0;
}
return (this.m_isAuthenticated == 1);
}
}

关于asp.net-mvc - User.Identity.IsAuthenticated 注销 asp.net mvc 后为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10663873/

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