cookie原理分析
- 一个cookie的设置以及发送过程分为以下四步
- 客户端发送一个http请求到服务器端
- 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
- 客户端发送一个http请求到服务器端,其中包含Cookie头部
- 服务器端发送一个http响应到客户端
cookie常用属性
- expires 有效期
- 临时COOKIE(缓存cookie)
setcookie(“uName”,“admin”); - 硬盘COOKIE
//一小时过期
setcookie(“uName”,“admin”,time()+ 3600)
//永久性COOKIE
setcookie(“password”,“123”,PHP_INT_MAX); - path有效 路径
//只有在upload文件夹下才能被访问到
setcookie(“uName”,“admin”,time()+ 3600,"/upload") - domain 域名
- 域名:
- 顶级:baidu.com
- 二级域名
- www.baidu.com
- music.baidu.com
- image.baidu.com
//只有在a.com以及它下面的子域名中才能被访问
setcookie(“uName”,“admin”,time()+ 3600,"/",“a.com”)
- 域名:
删除cookie
- 设置有效时间为过去时间
setcookie(“uName”,“admin”,time()-1); - 将cookie中的值设置为false或者空字符串
setcookie(“uName”,false);
//或者
setcookie(“uName”,""); - 不设置值
setcookie(“uName”); - 在浏览器中清除缓存
cookie的缺点:
- COOKIE数据不太安全;
- COOKIE存储的数据类型,只能是字符串;
- COOKIE文件是有容量限制(大约4KB)。4*1024b–> 1个文字大概是2~3b
session原理分析
- 客户端第一次请求服务器时,服务器开启一个session,生成一个唯一标识(sessionid:存储的数据与此sessionid关联),并以响应头的Set-Cookie属性响应到客户端
- 客户端的后续请求会一直通过请求头的Cookie属性携带sessionid(客户端与服务器通过此id维持状态)
session的优点:
- SESSION也是一种会话技术;
- SESSION数据存在服务器端,相对于比较安全;
- 服务器将SESSION数据保存在服务器上,而将SESSION的用户id存储在客户端电脑上。
- SESSION存储的数据类型,除了资源外的数据类型都可以;
- SESSION文件没有大小限制;
session与cookie的关系
session可以借助cookie实现状态维持,也可以不依赖cookie(URL重写)
区别 | cookie | session |
---|---|---|
存储位置 | 浏览器 | 服务器 |
浏览器携带的数据量 | 多 | 少(只携带session-id) |
存储的数据类型 | 只能是ASCII字符串 | 任意类型 |
安全性 | 较低 | 较高 |
默认的有效路径 | 当前路径及其子路径 | 整站有效 |
数据的传输量 | 有限制4K,不能超过20个 | 无限制 |
3、有效期上的不同
假如登录过Google,则Google的登录信息长期有效。
由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了阅读器该Session就会失效
6、跨域支持上的不同
Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。
跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。