gpt4 book ai didi

asp.net - FormsAuthentication.SignOut不能与自定义域Cookie一起使用

转载 作者:行者123 更新时间:2023-12-04 04:27:03 26 4
gpt4 key购买 nike

标题应该说明了一切。

这是设置cookie的代码:

// snip - some other code to create custom ticket
var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encodedTicket);
httpCookie.Domain = "mysite.com";
httpContextBase.Response.Cookies.Add(httpCookie);

这是我退出网站的代码:
FormsAuthentication.SignOut();

Environment:

  • ASP.NET MVC 3 Web Application

  • IIS Express

  • Visual Studio 2010

  • Custom domain: "http://localhost.www.mysite.com"


因此,当我尝试注销时,cookie仍然存在。如果我摆脱了 httpCookie.Domain行(例如默认为null),则可以正常工作。

我注意到的另一个奇怪的事情是,当我设置域时,Chrome不会在开发人员工具的“资源”部分中显示我的cookie,但是当我不设置域时,它会显示。

其次,当我实际使用自定义域创建cookie时,在下一个请求中,当我从请求中读取cookie(以对其进行解密)时,该cookie存在,但域为空?

我还尝试创建另一个具有相同名称的cookie,并将到期时间设置为昨天。没有骰子。

这是怎么回事?有人可以帮忙吗?

最佳答案

我相信,如果您将web.config中domain元素上的 forms 属性设置为与自定义Cookie中的属性相同,它应该可以工作。 (编辑:这种方法不起作用,因为FormsAuthentication上的SignOut方法在cookie上设置了您不喜欢的其他标志,例如HttpOnly。)SignOut方法基本上只是将cookie的过期日期设置为1999,并且它需要将域设置为设置正确的cookie。

如果您无法对域进行硬编码,则可以使用自己的退出方法:

private static void SignOut()
{
var myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "mysite.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
HttpContext.Current.Response.Cookies.Add(myCookie);
}

身份验证cookie只是一个普通cookie。因此您将以与其他任何cookie相同的方式删除它: expire it and make it invalid

关于asp.net - FormsAuthentication.SignOut不能与自定义域Cookie一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801935/

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