Asp.net mvc 注销asp.net mvc后,User.Identity.i验证为true

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; } 因此,每次它首先进行身份验证,然后运

我有一个函数,它有一个循环,在每个循环结束时休眠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++;
            }
但这仍然是事实。。
我想在用户注销后立即停止线程的执行

发生这种情况是因为
已验证
具有内部缓存,因为反复进行此验证的时间太长。因此,在循环内部,不离开页面,
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);
    }
}