您的位置:首页 > 编程语言 > Java开发

Java Cookie详解

2016-06-03 17:42 561 查看
Cookie 的作用我想大家都知道,通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器。cookie的内容主要包括:名字、值、过期时间、路径和域。路径和域一起构成cookie的作用范围。不设置cookie的过期时间那么就称这个cookie是会话级别的cookie,关闭浏览器cookie就消失。会话级别的cookie一般不存储在硬盘上而存储在内存里面。若设置了过期时间浏览器就会把cookie存储到硬盘上,关闭浏览器再打开,cookie会一直存在直到超过过期时间。存储在硬盘上的cookie可以被不同的浏览器所共享.当前
Cookie 有两个版本:响应头的标识分别是 “Set-Cookie”和“Set-Cookie2”。Cookies版本0(有时被称为Netscape Cookies)和Cookies版本1(RFC2965)。

Version 0:

NAME=VALUE:键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样

Expires:格式为:Wdy, DD-Mon-YYYY HH:MM:SS GMT。GMT时间格式。当超过这个时间,此cookie将失效。可选属性,如果未指定过期时间,则在当前会话结束后失效。

Domain:生成该 Cookie 的域名,如 domain="xulingbo.net",如果没有设置cookie的domain值,该属性的默认值就是创建cookie的网页所在的服务器的主机名。

Path:该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/。如果为未设置,则在哪个页面产生就只能在该页面访问。

Secure:指定当前cookie是否使用安全协议发送cookie(SSL,HTTPS等)

Version 1:

NAME=VALUE:与 Version 0 相同

Version:通过 Set-Cookie2 设置的响应头创建必须符合 RFC2965 规范,如果通过 Set-Cookie 响应头设置,默认值为 0,如果要设置为 1,则该 Cookie 要遵循 RFC 2109 规范

Comment:注释项,用户说明该 Cookie 有何用途

CommentURL:服务器为此 Cookie 提供的 URI 注释

Discard:是否在会话结束后丢弃该 Cookie 项,默认为 fasle

Domain:类似于 Version 0

Max-Age:最大失效时间,与 Version 0 不同的是这里设置的是在多少秒后失效

Path:类似于 Version 0

Port:该 Cookie 在什么端口下可以回传服务端,如果有多个端口,以逗号隔开,如 Port="80,81,8080"

Secure:类似于 Version 0

cookie可以有多个NAME/VALUE,用英文分号分隔开。如果有其他属性如path,也是键值对并且用分号分隔开。如Set-Cookie: NAME=VALUE; NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE。

需要用到javax.servlet.http.Cookie对象,这个对象支持version0和version1,只是个别属性没法设置。

HttpServletRequest request
HttpServletResponse response
Cookie cookie = new Cookie("cookiename","cookievalue");
cookie.setMaxAge(3600);
response.addCookie(cookie);

其他的属性设置是类似的。想要获取cookie的话,如下:

Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookie.getName();
cookie.getValue();
}

当用户注册网站的时候我们可以把用来唯一标识用户id的cookie保存到客户端,当用户再次打开我那个站的时候会把这个id发送到服务器,检查用户是否选择自动登录,然后既可以为用户自动执行登陆操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: