Cookie
1.什么是cookie?
Cookie是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,通过调用HttpServletResponse,向客户端浏览器颁发一个Cookie。客户端浏览器就会将浏览器保存起来,
当客户端再次请求时,客户端就会连同cookie一起提交给服务器,服务器就可以根据该cookie,得到用户的状态。当然服务器此时也可以修改该cookie。
流程图为:
当然:cookie功能并不是每一个浏览器都支持的,有些浏览器是禁止使用cookie功能的。
2.Cookie的获取和设置
Java中有一个专门的java.servlet.http.cookie类,可以通过操作该类来惊醒cookie的获取和设置。Cookie可以通过,request.getCookei();来获取。获得的是一个cookie数组。同时也可以通过response.addCookie(cookie)想客户端浏览器设置cookie.
3.cookie不可跨域名。
Cookie的域名设置方法为cookie.setDomain(domain);比如设置的域名为domain=www.baidu.com.这种情况下,设置的域名只能在www.baidu.com中使用,其他域名是无法获取到www.baidu.com下的域名。
www.baidu.com和wsx.www.baidu.com不是同一个域名。
4.设置cookie的属性
Cookie的主要属性有cookiename,cookievalue,domain,maxAge,path.
其中cookiename和cookieValue在cookie中以K,V的形式存在,domain为域名。
maxAge为cookie的存在时间。Path若设置为(”/”)为本域名下的该服务器度可以访问该cookie.假如设置为(”/xxx/”)则只有contenPath为/xxx/的路径才可以访问。
5.cookie的有效期,修改和删除。
5.1有效期
Cookie有效期的设置方法为:Cookie.setMaxAge(maxAge);
maxAge设置的时间即为cookie的有效期。一般以秒为单位。
比如设置的时间为60,那么cookie的有效期为60秒。不随浏览器的关闭而消失。
加入关闭浏览器又重新打开,那么此时若还没有到60秒,这个时候可以获取该cookie。
加入maxAge设置为-1,此时cookie的有效期随浏览器的关闭而清除。
5.2修改
通过方法重新设置一次cookie,就是cookie的修改。但是除了cookievalue,和maxage其它配置不能修改,否则,cookie为不同的cookie。
Response.addCookie(cookie);
5.3cookie的删除
将cookie的有效期设置为0.
6.cookie的安全属性
设置cookie时,将cooKie的Secure属性设置为true;
通过将设置cookie的setSecure(true);
7.cookie的使用
public CookieUtil{
private HttpServletRequest request;
public CookieUtil(HttpServletRequest request) {this.request = request;
}
/**
* 获取某个 cookie 名称
*
* @param name
* @return
*/
public Cookie getValue(String name) {
if (request != null) {
Cookie[] cookies = request.getCookies();
if (cookies != null) { // cookies 有可能为空,须判断
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
}
}
}
return null;
/**
* 获取 Cookie 值。
*
* @param cookieName
* Cookie 名称。
* @return 返回 cookie 名称下的 cookie 值,如果无则返回 null。
*/
public String getCookieValue(String cookieName) {
String value = null;
Cookie cookie = getValue(cookieName);
if (cookie != null)
value = cookie.getValue();
return value;
}
/**
* 写入cookie
*
* @param response
* @param cookieName
* @param cookieValue
* @param maxAge
* 生命周期(秒数)
*/
public static void write(HttpServletResponse response, String cookieName, String cookieValue, int maxAge, String domain) {
if (response == null || StringUtil.isEmpty(cookieName))
return;
try {
Cookie cookie = new Cookie(cookieName, cookieValue);
cookie.setPath("/");
if (!StringUtil.isEmpty(domain))
cookie.setDomain(domain);
cookie.setMaxAge(maxAge); //当cookie.setMaxAge(-1)时,为浏览器关闭则,cookie失效。
//maxAge = 60 = 一分钟,60*60 = 一个小时。
response.addCookie(cookie);} catch (Exception e) {
LogUtil.writeLog(e);
}
}
}
cookie和session详解参考资料。
http://blog.csdn.net/fangaoxin/article/details/6952954
http://blog.sina.com.cn/s/blog_670b6d880101deff.html