Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不是';t.ASPAUX cookie是否通过FormsAuthentication验证?_C#_.net_Asp.net_Forms Authentication - Fatal编程技术网

C# 为什么不是';t.ASPAUX cookie是否通过FormsAuthentication验证?

C# 为什么不是';t.ASPAUX cookie是否通过FormsAuthentication验证?,c#,.net,asp.net,forms-authentication,C#,.net,Asp.net,Forms Authentication,我有一个使用FormsAuthentication的站点,是的,cookie的名称是.ASPAUX:) 我完全可以登录。服务器创建表单身份验证票证,将其打包到cookie中,正确确定过期时间(提前1年)并将其发送给客户端 出于某种原因,经过一段时间后,即使cookie仍然存在(我可以通过FireCookies看到),HttpContext.Current.Request.IsAuthenticated在服务器上变为false。就好像cookie无法被验证一样 问题是:为什么会发生这种情况?如何调

我有一个使用FormsAuthentication的站点,是的,cookie的名称是.ASPAUX:)

我完全可以登录。服务器创建表单身份验证票证,将其打包到cookie中,正确确定过期时间(提前1年)并将其发送给客户端

出于某种原因,经过一段时间后,即使cookie仍然存在(我可以通过FireCookies看到),HttpContext.Current.Request.IsAuthenticated在服务器上变为false。就好像cookie无法被验证一样

问题是:为什么会发生这种情况?如何调试cookie突然失效而不过期的原因

编辑

以下是登录方法:

public static bool Login(int id)
        {
            try
            {
                string securityToken = UserHelper.AuthenticateUser(id);

                DateTime expiryDate = DateTime.Now.AddYears(1);
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                     1, id.ToString(), DateTime.Now, expiryDate, true,
                     securityToken, FormsAuthentication.FormsCookiePath);

                string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                cookie.Expires = expiryDate;

                HttpContext.Current.Response.Cookies.Add(cookie);

                return true;
            }
            catch
            {
                return false;
            }
        }
以及web.config:

<authentication mode="Forms">
            <forms loginUrl="~/Login.aspx" timeout="2880" slidingExpiration="true"/>
        </authentication>

我可以考虑检查以下几点:

您是否有多个域(包括
www.domain.com
vs
domain.com
)?

如果是,请将cookie中的域设置为
domain.com
,或者确保始终使用相同的域

您正在使用HTTPS吗?

如果是这样,请确保始终通过HTTPS访问cookie,或者确保在
HttpCookie
上将
Secure
设置为false(否则,只能通过HTTPS请求访问)

是否从虚拟目录写入cookie?

如果是这样,可能会设置cookie上的“路径”,并且无法从路径外部访问它

您有多台web服务器吗?


如果是这样,请确保您的计算机密钥设置为相同的值(尽管这会引发异常)

在web.config中设置静态计算机密钥,以确保生成票证时使用的加密密钥在回收的应用程序池(或在ASP.NET web服务器中重新启动的网站)中仍然有效


另请参见本部分的表单身份验证票据部分

谢谢您的回复。以上所有问题的答案都是否定的。在添加其他答案之前,是否可能有其他方法正在覆盖表单验证cookie?如果你使用的是登录控件?@Neil,我不这么认为。我没有使用登录控制。我有另一个关于自动生成机器密钥的想法,所以添加了一个新的答案。你解决过这个问题吗?我的问题似乎是一样的。添加machineKey没有帮助。票证加密的默认行为是否只是因为服务器重新启动而使票证无效?是不是有点奇怪?顺便说一下,谢谢。我试试看。我不知道如何分配静态机器密钥,但我现在会处理它。我们接近解决方案了。刚刚验证:重新启动网站没有效果,但回收应用程序池会导致所有表单身份验证票证过期。我现在要试试静态键。我能够设置静态键,现在它不再对应用程序池循环有用,这已经是一个优势。新的我会看看它是否会过期。嗨@Ciwee,这并不是说票据加密故意使票据失效。票据使用机器密钥加密,除非明确指定,否则默认为自动生成。因此,这意味着每次应用程序重新启动时都会有一个新的密钥。