Http - Cookie篇

HTTP是无状态协议,它本身不能以状态来区分和管理请求和响应。当服务端需要记录用户的状态时,就需要某种机制来记录和识别。

会话(Session) 跟踪就是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是CookieSession,本篇介绍Cookie

Cookie

Cookie技术是客户端的解决方案。

Cookie通常以文本的方式记录服务端发来的特殊信息,并在之后的请求中带上Cookie以便让服务端确认,大致流程如下:

┌─────────────┐  1. Request              ┌───────────────┐
│             │ ───────────────────────> │               │
│             │  2. Response Set-Cookie  │               │
│             │ <─────────────────────── │               │
│  Web Client │                          │  Web Server   │
│             │  3. Request + Cookie     │               │
│             │ ───────────────────────> │               │
│             │  4. Response             │               │
│             │ <─────────────────────── │               │
└─────────────┘                          └───────────────┘

Set-Cookie

当服务端准备开始管理客户端状态时,会通过Set-Cookie来通知客户端建立Cookie,并要求在后续的请求中将此Cookie发送回服务端,直到Cookie过期。

Set-Cookie有几个主要的属性:

属性 说明
Name=Value Cookie信息键值对 - 必需项
Expires= Cookie过期时间戳
Max-Age= Cookie有效时间(秒)
Domain= Cookie限制发送范围的文件目录
Path= Cookie适用对象的域名
Secure Cookie是否只适用与Https
HttpOnly Cookie无法使用JavaScript获得,防止跨站脚本攻击(XSS)

服务端操作Cookie(Java)

添加Cookie

Cookie cookie = new Cookie("username","lili");  // 新建Cookie
cookie.setDomain(".example.com");               // 设置域名
cookie.setPath("/");                            // 设置路径
cookie.setMaxAge(Integer.MAX_VALUE);            // 设置有效期
response.addCookie(cookie);                     // 输出到客户端

获取Cookie

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

客户端操作Cookie(JavaScript)

获得Cookie的值

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i 

设置Cookie值

function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

删除Cookie

function delCookie(name) {
  var cval=getCookie(name);
  if(cval!=null) {
    setCookie(name, cval, -1);
  }
}

参考

  • Using HTTP cookies
  • Set-Cookie
  • 认识HTTP----Cookie和Session篇

本文完

你可能感兴趣的:(Http - Cookie篇)