cookie保存信息

Posted lazyli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie保存信息相关的知识,希望对你有一定的参考价值。

利用cookie作为保存信息,需要做处理的是获取domain,特别是跨域问题,不同的网址域名不一样,

package com.rb.utils.auth;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;


/**
 * 
 * Cookie 工具类
 *
 */
public final class CookieUtils 

    /**
     * 得到Cookie的值, 不编码
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName) 
        return getCookieValue(request, cookieName, false);
    

    /**
     * 得到Cookie的值,
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) 
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) 
            return null;
        
        String retValue = null;
        try 
            for (int i = 0; i < cookieList.length; i++) 
                if (cookieList[i].getName().equals(cookieName)) 
                    if (isDecoder) 
                        retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                     else 
                        retValue = cookieList[i].getValue();
                    
                    break;
                
            
         catch (UnsupportedEncodingException e) 
            e.printStackTrace();
        
        return retValue;
    

    /**
     * 得到Cookie的值,
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) 
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) 
            return null;
        
        String retValue = null;
        try 
            for (int i = 0; i < cookieList.length; i++) 
                if (cookieList[i].getName().equals(cookieName)) 
                    retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
                    break;
                
            
         catch (UnsupportedEncodingException e) 
             e.printStackTrace();
        
        return retValue;
    

    /**
     * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue) 
        setCookie(request, response, cookieName, cookieValue, -1);
    

    /**
     * 设置Cookie的值 在指定时间内生效,但不编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage) 
        setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
    

    /**
     * 设置Cookie的值 不设置生效时间,但编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, boolean isEncode) 
        setCookie(request, response, cookieName, cookieValue, -1, isEncode);
    

    /**
     * 设置Cookie的值 在指定时间内生效, 编码参数
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage, boolean isEncode) 
        doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
    

    /**
     * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage, String encodeString) 
        doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
    

    /**
     * 删除Cookie带cookie域名
     */
    public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName) 
        doSetCookie(request, response, cookieName, "", -1, false);
    

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     * 
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) 
        try 
            if (cookieValue == null) 
                cookieValue = "";
             else if (isEncode) 
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) // 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     * 
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, String encodeString) 
        try 
            if (cookieValue == null) 
                cookieValue = "";
             else 
                cookieValue = URLEncoder.encode(cookieValue, encodeString);
            
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) // 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 得到cookie的域名
     */
    public static final String getDomainName(HttpServletRequest request) 

        String url = request.getRequestURL().toString();
        String result = "";
        int j = 0, startIndex = 0, endIndex = 0;
        for (int i = 0; i < url.length(); i++) 
            if (url.charAt(i) == ‘/‘) 
                j++;
                if (j == 2)
                    startIndex = i;
                else if (j == 3)
                    endIndex = i;
            

        
        result = url.substring(startIndex + 1, endIndex);
        if (result != null && result.indexOf(":") > 0) 
            String[] ary = result.split("\\:");
            result = ary[0];
        
        return result;
    

 

根据请求动态获取域名。

以上是关于cookie保存信息的主要内容,如果未能解决你的问题,请参考以下文章

6 保存与加载cookie信息

怎么把图片的信息保存到cookie中

问题:将每次输入的信息保存在cookie中,再从cokie中取出值并显示在下拉框中。急需如何保存在cookie中...

.NET 中用写登陆 注册的时候用cookie把信息保存到cookie中可以选择保存时间

如何保存cookie?望详细解释.

cookie保存信息