java cookie

Cookies是一种结构化的数据,是由web服务器返回给请求的一个服务器响应的一部分。Cookie可以通过设置HTTP响应头来进行设置。无论什么时候发送请求,浏览器都会把cookie作为请求头的一部分返回给服务器。请求发送的目的是为了能够更新cookie里面的值。同时,无论数据有没有改变,cookies也总是会占据HTTP响应头的一部分。
Cookie实际上是一小段的文本信息,大小4BK左右,通过加后密存放客户端。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。


在 HTML 文档被发送之前,Web 服务器通过传送 HTTP 包头中的 Set-Cookie 消息把一个 cookie 发送到用户的浏览器中.如: 

Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com; expires= Wednesday, 19-OCT-05 23:12:40 GMT;[secure]
Set-Cookie 的每个属性解释如下:
1、Customer=huangxp 一个”名称=值”对,把名称 customer 设置为值”huangxp”,这个属性在 Cookie 中必须有。
2、path=/foo 控制哪些访问能够触发 cookie 的发送。如果没有指定 path,cookie 会在所有对此站点的 HTTP 传送时发送。如果 path=/directory,只有访问 /directory 下面的网页时,cookie 才被发送。在这个例子中,用户在访问目录 /foo 下的内容时,浏览器将发送此 cookie。如果指定了 path,但是 path 与当前访问的 url 不符,则此 cookie 将被忽略。
3、domain=.ibm.com 指定 cookie 被发送到哪台计算机上。正常情况下,cookie 只被送回最初向用户发送 cookie 的计算机。在这个例子中,cookie 会被发送到任何在 .ibm.com 域中的主机。如果 domain 被设为空,domain 就被设置为和提供 cookie 的 Web 服务器相同。如果 domain 不为空,并且它的值又和提供 cookie 的 Web 服务器域名不符,这个 Cookie 将被忽略。
4、expires= Wednesday, 19-OCT-05 23:12:40 GMT 指定 cookie 失效的时间。如果没有指定失效时间,这个 cookie 就不会被写入计算机的硬盘上,并且只持续到这次会话结束。
5、secure 如果 secure 这个词被作为 Set-Cookie 头的一部分,那么 cookie 只能通过安全通道传输(目前即 SSL 通道)。否则,浏览器将忽略此 Cookie。
一旦浏览器接收了 cookie,这个 cookie 和对远端 Web 服务器的连续请求将一起被浏览器发送。例如 前一个 cookie 被存入浏览器并且浏览器试图请求 URL 时,下面的 HTTP 包头就被发送到远端的 Web 服务器。


一次典型的网络浏览过程
浏览器对于 Web 服务器应答包头中 Cookie 的操作步骤:
1. 从 Web 服务器的应答包头中提取所有的 cookie。
2. 解析这些 cookie 的组成部分(名称,值,路径等等)。
3. 判定主机是否允许设置这些 cookie。允许的话,则把这些 Cookie 存储在本地。
浏览器对 Web 服务器请求包头中所有的 Cookie 进行筛选的步骤:
1. 根据请求的 URL 和本地存储 cookie 的属性,判断那些 Cookie 能被发送给 Web 服务器。
2. 对于多个 cookie,判定发送的顺序。
3. 把需要发送的 Cookie 加入到请求 HTTP 包头中一起发送。


代码

 //根据Key获取Cookie
 public static Cookie getCookies(HttpServletRequest request, 
 String key) {
     // 从 request 中获取所有的 Cookie 
        Cookie[] cookies = request.getCookies();
        if (null == cookies || cookies.length <= 0) {
            return null;
        }
        for (Cookie c : cookies) {
            if (key.equals(c.getName())) {
                return c;
            }
        }
        return null;
    }

//新增或更新cookie
public static void setCookies(HttpServletRequest request,
            HttpServletResponse response, String key, String value,
            boolean isAutomatic) {
        Cookie cookie = getCookies(request, key);
        if (cookie == null) {
            cookie = new Cookie(key, URLEncoder.encode(value,"UTF-8"));     
            cookie.setPath("/");                    
            if (isAutomatic) {
                cookie.setMaxAge(7 * 24 * 3600);
            }
        } else {
            cookie.setPath("/");
            cookie.setValue(value);
        }
        response.addCookie(cookie);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值