2015-05-09 90 views
0

我想在登录时在我的响应中设置cookie,然后在每个请求中读取它。 为此,我已经在登录时添加饼干这样的:添加和读取Cookie

Cookie cookieClientId = new Cookie("id", token.getTkn()); 
    cookieClientId.setMaxAge(24*60*60); 
    response.addCookie(cookieClientId); 

当要求来我检查日的cookie存在或不喜欢这样的:

cookies = ((HttpServletRequest) request).getCookies(); 
    cookieId = null; 
    if (cookies != null) { 
       for (Cookie ck : cookies) { 
       System.out.println("ck--------------- "+ck.getName()); 
        if (ck.getName().toString().equals("id")) { 
          System.out.println("id cookie equal"); 
          cookieId = ck.getValue(); 
          System.out.println("cookie id " + cookieId); 
          System.out.println(cookieId.equals(authToken)); 
          if (cookieId.equals(authToken)) { 
           isSecretAndKeyValid = true; 
          } 
         }; 
        } 

但我面临的问题是我只在第一次请求中获取cookie后才能发送请求。并在此之后,在每个请求我不罚款任何cookie与'id',这是我设定的时间。

我试图搜索cookie添加,检索方法,我发现这只在几乎每一个地方。

+0

当你设置cookie时。在登录之前还是之后? –

+0

认证后的身份验证方法。 – Anita

+0

您是否检查过cookie是否在浏览器(开发工具)中设置?你在哪里打电话给你的代码来搜索cookie? – mrak

回答

1

默认情况下,当你发送一个cookie到浏览器,浏览器会将该cookie返回给发送该cookie的目录中的所有servlet和JSP以及该目录的所有子目录。要使cookie可用于整个应用程序,可以将路径设置为“/”。 (引自Murach的Servlets和JSP,第2版)

Cookie cookieClientId = new Cookie("id", token.getTkn()); 
cookieClientId.setMaxAge(24*60*60); 
cookieClientId.setPath("/"); 
response.addCookie(cookieClientId); 
+0

是的。而且很不幸的是,默认路径没有设置为'“/”'* * – ZhongYu

+0

它工作正常。谢谢 – Anita

0

每个HTTP请求时,cookie是分离,你必须cookie数据存储在您的客户端,然后在每个请求,您设置Cookie在这样的:

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

    for (HttpCookie cookie : cookieManager.getCookieStore().getCookies()) { 

     cookieString += cookie.toString();   
    } 

    connection.setRequestProperty("Cookie",cookieString);