Internet Explorer 中的 cookie 无法正常工作

3
我正在使用以下代码向cookie中添加一个值:
Cookie testcookie = new Cookie ("test",test);
testcookie .setMaxAge(5*60);
response.addCookie(testcookie) ;

但是我在Internet Explorer中无法获取cookie值。

获取cookie值的代码:

Cookie cookies [] = getRequest().getCookies ();
    Cookie myCookie = null;
    if (cookies != null)
    {

        for (int i = 0; i < cookies.length; i++) 
        {
            if (cookies [i].getName().equals ("test"))
            {
                myCookie = cookies[i];
                String testval=myCookie.getValue();
            }
        }
    }

但是在Firefox中可以使用,IE中启用了cookie。如何解决这个问题?

你确定你正在访问相同的域名吗?例如 http://site.com,而不是 http://www.site.com。 - Bozho
1
可能是以下两个问题的重复:https://dev59.com/x0XRa4cB1Zd3GeqPwPzn 和 https://dev59.com/mkrSa4cB1Zd3GeqPU0Jy - skaffman
是的,这是一个重复的问题,但我在那里没有得到解决方案。 - sarah
你是否检查过IE安全区域是否允许该站点的持久性Cookie? - Simon G.
2个回答

1

我最近也遇到了同样的问题,但我找到了解决方案。尝试手动设置cookie,因为javax.servlet.http.Cookie不允许您设置Expires属性:

StringBuilder cookie = new StringBuilder("test=" + test + "; ");

DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss 'GMT'", Locale.US);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5*60);
cookie.append("Expires=" + df.format(cal.getTime()) + "; ");
cookie.append("Max-Age=" + (5*60));
response.setHeader("Set-Cookie", cookie.toString());

希望能帮到你。

0

SimpleDateFormat解决方案有效,尽管我注意到cookie没有在我期望的时间被删除。似乎它将时间打印为我的本地时间,而格式化程序会将其呈现为GMT。如果您将日历对象设置为时区GMT并使用String.format,则可以在正确的时区中进行格式化。

// Your values here
String name = "test";
String value = "test";
String path = "/";
int maxAge = 60;


StringBuilder sb = new StringBuilder();
sb.append(name);
sb.append("=");
sb.append(value);

sb.append("; path=");
sb.append(path);

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.add(Calendar.SECOND, maxAge);
sb.append("; Expires=");
sb.append(String.format(Locale.US, "%1$ta, %1$td-%1$tb-%1$tY %1$tH:%1$tM:%1$tS GMT", cal));
sb.append("; Max-Age=");
sb.append(maxAge);

response.setHeader("Set-Cookie", sb.toString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接