Asp.net mvc 注销asp.net mvc后,User.Identity.i验证为true
我有一个函数,它有一个循环,在每个循环结束时休眠6秒Asp.net mvc 注销asp.net mvc后,User.Identity.i验证为true,asp.net-mvc,Asp.net Mvc,我有一个函数,它有一个循环,在每个循环结束时休眠6秒 Thread.Sleep(TimeSpan.FromSeconds(6)) 此循环10次,即函数运行60秒,每次暂停6秒 我在循环开始时进行了身份验证测试 if (!HttpContext.Current.User.Identity.IsAuthenticated) { return null; } 因此,每次它首先进行身份验证,然后运
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++;
}
但这仍然是事实。。
我想在用户注销后立即停止线程的执行发生这种情况是因为已验证
具有内部缓存,因为反复进行此验证的时间太长。因此,在循环内部,不离开页面,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);
}
}
实际上,这是一个很长的轮询函数,它可以获取用户的所有通知,因为函数运行一分钟,用户在这段时间内注销,所以它不应该完成请求。用户永远不会离开它刚刚注销的页面。我能提供的其他参数是什么check@deepakgates也许cookie上的值可以发出注销信号并直接停止它。可能是一个表到数据库的值,此行与用户登录cookie连接。这取决于您,一些快速的操作。是否可以从函数外部停止正在进行的线程,或者强制已验证的线程不使用内部线程cache@deepakgates要停止线程,最好更改线程中的标志并基于该标志停止循环。强制IsAuthenticated不使用内部缓存是不可能的。
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);
}
}