cookie session token区别
一、cookie
cookie是浏览器保存在用户电脑上的一小段文本,通俗的来讲就是当一个用户通过 http访问到服务器时,服务器会将一些 Key/Value键值对返回给客户端浏览器(cookie由服务端产生,保存在浏览器),并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据通过请求头又被完整地给带回服务器,服务器根据这些信息来判断不同的用户。
也就是说, cookie是服务器传给客户端并保存在客户端的一段信息,这个 Cookie是有大小,数量限制的。
Cookie的创建
当前 Cookie有两个版本,分别对应两种设置响应头:“Set-Cookie”和 “Set-Cookie2”。在Servlet中并不支持Set-Cookie2。
setcookie 的七个参数
格式setcookie(name,value,expire,path,domain,secure,Httponly)
1、name 必需。规定cookie的名称。
2、value 必需。规定cookie的值。
3、expire 可选。规定cookie的有效时间
4、path 可选。规定cookie的服务器路径,浏览器在发送cookie时只会发送对应路径及祖先路径的cookie
如cookieA设置在根下(path:/),cookieB设置在/dir/下,访问dir的请求会带着cookieB和cookieA,但访
问根路径的请求只会带着cookieA
5、domain 可选。规定cookie的域名。只能设置为当前域或当前域的上级域。例如,一个在a.b.com的页面,可以设置
为a.b.com或.b.com 。如果设置为.b.com的话,那么在其它子域中也能访问到。
6.secure 可选。规定是否通过安全的HTTPS 或者 ssl连接来传输cookie。其值为0或1,如果值为1,则cookie只能在https连接上有效,默认值为0
表示cookie在http和https连接上都有效
7、httponly 设置成true,cookie仅通过http协议访问。意思就是cookie无法通过类似JavaScript这样的脚本语言访问。要有效的减少xss
攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议,PHP5.2.0中添加。bool值true和false
Cookie的分类
- 会话级别Cookie:所谓会话级别Cookie,就是在浏览器关闭之后Cookie就会失效。(下图中,显示值为session的为会话cookie)
- 持久级别Cookie:保存在硬盘的Cookie,只要设置了过期时间就是硬盘级别Cookie。(显示时间的为持久cookie)

二、session
Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有cookie值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这就是我们的session。
Session是基于Cookie来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登陆就保存用户信息,视具体情况),并把这个id通过Cookie存到客户端,客户端每次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是NAME为JSESSIONID的一个Cookie。
session 一般保存在服务器的内存(所以通常会占用服务器资源,用户越多,服务器内存占用越多),不同的服务器(apache,tomcat)可以通过设置timeout 来设置session的过期时间。
用户认证之后,服务端做 session认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。
有四种方式让Session正常工作:
- 通过URL传递SessionID
- 通过Cookie传递SessionID
- 通过SSL传递SessionID
- 通过隐藏表单传递SessionID
三、token
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
token一般保存在服务的文本文档或数据库里面,所以不会占用服务器的资源。
token一般通过表单的方式来传输(不会通过cookie来传输)。也可用cookie传输token,但是一般不会这么去做。
四、签名和数字证书

浙公网安备 33010602011771号