背景:
当用户通过身份验证时,我们会以这种方式创建Cookie:
var cookieASP = FormsAuthentication.GetAuthCookie(user.Id, true);
cookieASP.Domain = "x.y.local";
是的,domain
是本例的硬编码。
在Firefox 11中使用Cookie查看器扩展程序,我可以看到domain
的Cookie为:.x.y.local
,其中包含.
。我知道它允许w.x.y.local
和q.x.y.local
之间的共享Cookie。确定。
但是,当用户点击断开连接时,他没有被踢出去......
var cookieAsp = System.Web.Security.FormsAuthentication.GetAuthCookie(u.Identifiant, true);
cookieAsp.Expires = DateTime.Now.AddDays(-10);
Response.Cookies.Set(cookieAsp);
FormsAuthentication.SignOut();
使用调试器,我们可以看到cookieAsp.Domain
为空。并且cookie不会从浏览器的cookie中删除。
如果我编辑Cookie域(直接从浏览器),并将其域设置为x.y.local
而不使用前导.
,则会删除Cookie并断开用户连接。
我不明白为什么会添加.
,以及为什么浏览器不能理解它。
编辑(我猜是重要的):我们这样做是因为如果我们不设置domain
,那么IE8(只有8)无法理解我们的cookie。
答案 0 :(得分:1)
如果要删除Cookie,则必须使用要删除的Cookie的完全域指定Cookie。浏览器不会根据请求发送cookie域,因此当您尝试在调试器会话中检查时,您将始终获得空值。
所以在Response.Cookies.Set(cookieAsp);
添加cookieASP.Domain = "x.y.local";
之前。