我使用GWT的Cookies类生成cookie。
当我使用以下
时Cookies.setCookie(LOGIN_COOKIE_NAME, value, expires);
一切正常。检查浏览器中的cookie会导致mydomay.com正常运行。
但是,当我使用以下内容时:
String path = "/"
String domain = "mydomain.com"
Cookies.setCookie(LOGIN_COOKIE_NAME, value, expires, domain, path, secure);
当我在浏览器中查看时,我可以在域前看到一个点:
.mydomain.com
点来自哪里?
事实证明,如果给出.mydomain.com,Cookies.removeCookie(LOGIN_COOKIE_NAME)对我不起作用。为什么在前面有一个点时不能删除这个cookie?
答案 0 :(得分:10)
点表示Cookie也适用于mydomain.com
的任何子域,例如example.mydomain.com
。可以将其视为*.mydomain.com
,其中*是通配符。
您可以在此处找到一个非常相似的问题:What is the cookie dot rule?
答案 1 :(得分:2)
如果您在创建域时通过了域,那么当您清除Cookie时,您需要传递相同的域(例如How do you remove a Cookie in a Java Servlet?);但是,这里没有API允许这样做。
这听起来很像报告为RFE: Provide a Cookies.removeCookie(name, domain, path) method的错误:
在服务器上为给定的URL以及域名和路径设置cookie 作为返回结果的一部分,在cookie上显式设置。 Cookies.remove(name)和Cookies.remove(名称,路径)不会删除 FF3.0.14上的cookie。 (基于路径的删除适用于IE 6)。
该问题中建议的解决方法是修补GWT Cookies
类。
答案 2 :(得分:1)
这里的Dot表示cookie也适用于子域,例如abcd.mydomain.com。 IT非常相似,你可以在你的域名中添加一个完全不同的网站,比如说注册段在不同的子域中分开,所以一般来说它可以用通配符说* .mydomain.com。这被称为Cookie点规则。请参阅IETF Page了解相同内容。您也可以让同一个cookie引用多个令牌值。
答案 3 :(得分:1)
您必须将过期日期设置为现在,以便Cookie过期到期。
Cookies.setCookie(COOKIE_NAME, "", new Date(), domain, path, false);