Cookie和登陆注册

1. 什么是Cookie?

  1. 服务器经过 Set-Cookie 头给客户端一串字符串
  2. 客户端每次访问相同域名的网页时,必须带上这段字符串
  3. 客户端要在一段时间内保存这个Cookie
  4. Cookie 默认在用户关闭页面后就失效,后台代码能够任意设置 Cookie 的过时时间
  5. 大小大概在 4kb 之内

2. cookie的设置获取和删除

cookie是运行在客户端的,能够用JS来设置cookie.
首先须要稍微了解一下cookie的结构,简单地说:cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间通常是以“;”分隔。后端

  • JS设置cookie:
document.cookie="name="+username;

 

  • JS读取cookie:
 var getCookie = function (name) { var arr; var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else return null; };

 

  • JS删除cookie:
var delCookie = function (name) { setCookie(name, ' ', -1); };

 

3. cookie的主要做用:

  • 会话状态管理(如用户登陆状态、购物车、游戏分数和其它须要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为)

4. cookie设置语法:

document.cookie = "cookieName=mader; expires=Fri, 31 Dec 2017 15:59:59 GMT; path=/mydir; domain=cnblogs.com; max-age=3600; secure=true";

 

  • cookieName=mader :name=value,cookie的名称和值
  • expires=Fri, 31 Dec 2017 15:59:59 GMT: expires,cookie过时的日期,若是没有定义,cookie会在对话结束时过时。日期格式为 new Date().toUTCString()
  • path=/mydir: path=path (例如 '/', '/mydir') 若是没有定义,默认为当前文档位置的路径。
  • domain=cnblogs.com: 指定域 (包括全部子域名)
  • max-age=3600: 文档被查看后cookie过时时间,单位为秒
  • secure=true: cookie只会被https传输 ,即加密的https连接传输

5. 相关问题:

我在 Chrome 登陆了获得 Cookie,用 Safari 访问,Safari 会带上 Cookie 吗?
不会,由于浏览器会带上域名Cookie, Cookie 还能够根据路径作限制浏览器

Cookie 存在哪?
Windows 存在 C 盘的一个文件里服务器

Cookie会被用户篡改吗?
能够,能够用Session 来解决这个问题,防止用户篡改cookie

Cookie 有效期吗?
默认有效期20分钟左右,不一样浏览器策略不一样
后端能够强制设置有效期,具体语法看 MDNdom

Cookie 遵照同源策略吗?
也有,不过跟 AJAX 的同源策略稍微有些不一样。
当请求 qq.com 下的资源时,浏览器会默认带上 qq.com 对应的 Cookie,不会带上 baidu.com 对应的 Cookie
当请求 v.qq.com 下的资源时,浏览器不只会带上 v.qq.com 的Cookie,还会带上 qq.com 的 Cookie加密