RPM*_*984 9 asp.net cookies dns asp.net-mvc forms-authentication
标题应该说明一切.
这是设置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);
Run Code Online (Sandbox Code Playgroud)
这是我登出我的网站的代码:
FormsAuthentication.SignOut();
Run Code Online (Sandbox Code Playgroud)
环境:
ASP.NET MVC 3 Web应用程序
IIS Express
Visual Studio 2010
- 自定义域名:"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);
}
Run Code Online (Sandbox Code Playgroud)
身份验证 cookie 只是一个普通的 cookie;因此您可以像删除任何其他 cookie 一样删除它:使其过期并使其无效。
归档时间: |
|
查看次数: |
4376 次 |
最近记录: |