首先我已经把cookie写入客户端了,以下是截图:
    读取cookie的java代码:private String getUsername(HttpServletRequest request){  
        Cookie[] cookies = request.getCookies();  
        String username = "";  
        if(cookies!=null){  
            for (int i = 0; i < cookies.length; i++)   
            {  
               Cookie c = cookies[i];       
                       System.out.println(c.getName()+"--"+c.getValue());  
               if(c.getName().equalsIgnoreCase("username"))  
               {  
                   username = c.getValue();  
               }  
            }  
        }  
        return username;  
    }  
   
 程序输出的cookie key/value如下:JSESSIONID--3895FE881678B0085D24BC54F43BE077q7O_visitedfid--2uchome_loginuser--liusheng不知道为什么拿不到username和ticket两个cookie?cookiejava

解决方案 »

  1.   

    /** cookie的生命周期(一周) */
    public static final int COOKIE_AGE = 604800000;/**
     * 设置cookie
     * @param name cookie名字
     * @param value cookie值
     */
    public static void addCookie(String name, String value) {
    try {
    Cookie cookie = new Cookie(name, URLEncoder.encode(value, CharEncoding.UTF_8));
    cookie.setPath("/");
    cookie.setMaxAge(COOKIE_AGE);
    ResponseThreadLocal.get().addCookie(cookie);
    } catch (Exception e) {
    log.error("设置cookie", e);
    }
    } /**
     * 根据名字获取cookie
     * @param name cookie名字
     * @return String
     */
    public static String getCookie(String name) {
    try {
    Map<String, Cookie> cookieMap = ReadCookieMap();
    if (cookieMap.containsKey(name)) {
    Cookie cookie = (Cookie) cookieMap.get(name);
    return URLDecoder.decode(cookie.getValue(), CharEncoding.UTF_8);
    }
    } catch (Exception e) {
    log.error("根据名字获取cookie", e);
    }
    return "";
    } // 将cookie封装到Map里面
    private static Map<String, Cookie> ReadCookieMap() {
    Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
    Cookie[] cookies = RequestThreadLocal.get().getCookies();
    if (null != cookies) {
    for (Cookie cookie : cookies) {
    cookieMap.put(cookie.getName(), cookie);
    }
    }
    return cookieMap;
    }
      

  2.   

    path不同是因为不同应用设置的cookie,难道这对取cookie有影响吗?
      

  3.   

    看来必须试试5楼的方法,怀疑是没有setpath
      

  4.   


    请问ResponseThreadLocal和RequestThreadLocal是什么变量啊?
      

  5.   


    在当前这个线程中取出response和request
    线程,你懂的,把这两个对象放入线程中,不再局限于只能在servlet中使用,
    而是你任何出现java代码的角落都可以使用这两个对象了
      

  6.   

    ok,用5楼的方法成功取出了cookie,非常感谢~
    随便问一下的使用threadlocal失败了,出现了nullpointexception
    代码如下:public static ThreadLocal<HttpServletResponse> responseThreadLocal = new ThreadLocal<HttpServletResponse>();
    responseThreadLocal.get().addCookie(cookie);responseThreadLocal.get() 为null,知道什么原因呀~~
      

  7.   

     我觉得也是过期时间,/PATH也可能,第一个我想到的就是PATH,cookies没事乱放?
      

  8.   

    自己服务器写的cookie才能取到,过期时间默认会话结束时
      

  9.   

    恩,确实是path设置的原因,设置成‘/’就好了