http笔记:cookie

由于http协议无状态,cookie被用来判断客户端状态

  • 作用域:由文档路径确定,默认对应文档同目录或子目录的文档可见,可通过path属性修改
  • 有效期:默认为当前浏览器进程(而不是浏览器窗口或标签)相同,可通过max-age属性修改
  • 属性
    • 名值对,名不区分大小写,值为字符串,http头中的名和值都是URL编码
    • 域,domain,默认为设定cookie的域名
      “`
      domain=www.example.com //指定子域
      domain=.exampe.com //不指定子域,对所有子域可见
  1. - 路径,path,默认为设定对应文档所在目录,对该目录及其子目录可见
  2. - 失效时间,expiresGMT格式的时间
  3. - 有效时间,max-age,单位为秒
  4. - 安全标识,secure,非名值对形式,出现secure字段时则设定,设定securecookie只有在使用SSL链接时才能传输
  5. - 可见性,httpOnly,设置时浏览器端脚本将不能通过document.cookie访问cookie
  6. - 由服务器设定
  7. - 在某次响应头中加入

Set-Cookie: name=value;name2=value2;expires=Mon, 22-Jan-07 02:10:24 GMT;domain=.example;secure//服务器响应头中设定各种属性

  1. - 之后客户端每次对该作用域的访问自动在请求头中加入
  2. ```
  3. Cookie: name=value//请求时只发送名值对
  • javascript API
    • cookie作为Document对象的属性document.cookie,值为字符串类型,由名值对(包括domain,path等属性及其值)构成,各名值对用分号隔开
      “`
      name=value;name2=value2;expires=Mon, 22-Jan-07 02:10:24 GMT;domain=.example;secure
  1. - 读取:直接读取document.cookie的值时,根据当前作用域返回一个字符串,只包含名值对,不同名值对用分号和空格"; "隔开,不包含其他属性,值是被编码的;
  2. ```javascript
  3. "name1=value1;name2=value2;name3=value3"//document.cookie的值
  4. //将cookie解析为对象
  5. function cookieParse(){
  6. var cookieObj = {};
  7. var cookieStr = document.cookie;
  8. if(cookieStr=""){
  9. return cookieObj;
  10. }
  11. else{
  12. var lisr = cookieStr.split("; ");
  13. for(var i = 0; i < list.length; i++){
  14. aCookie = list[i];
  15. vs = aCookie.split("=");
  16. name =decodeURIComponent(vs[0]);;
  17. value = decodeURIComponent(vs[1]);//对值进行解码
  18. cookieObj[name]=value;
  19. }
  20. }
  21. }
  • 设置cookie:直接给document.cookie赋值
    “`javascript
    document.cookie = encodeURIComonent(name) + “=” + encodeURIComonent(value);//拼接前需要对名和值进行编码
  1. - 名不存在,cookie中加入新的名值对
  2. - 名已存在且对应的域和路径都相同时,覆盖原来的值
  3. - 设置cookie属性:直接在给cookie赋值时拼接属性键值对
  4. ```javascript
  5. document.cookie = encodeURIComonent(name) + "=" + encodeURIComonent(value) + ";domain=www.example.com" + ";path=/";
  • 性能问题
    • 静态资源请求不需要状态,请求中的cookie无用,对此需要将静态文件等不需要cookie的请求放到额外的域名上。使用额外的域名还可以增加浏览器下载线程的数量




posted @ 2016-04-01 16:14  initial-wu  阅读(142)  评论(0)    收藏  举报