1. 什么是Cookie?
- 服务器经过 Set-Cookie 头给客户端一串字符串
- 客户端每次访问相同域名的网页时,必须带上这段字符串
- 客户端要在一段时间内保存这个Cookie
- Cookie 默认在用户关闭页面后就失效,后台代码能够任意设置 Cookie 的过时时间
- 大小大概在 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加密