cookie和session和token的区别
今天重新复习了一下cookie和session与token,所以记录一下吧。
cookie
客户端的安全机制,浏览器第一次访问服务器时由服务器返回颁发的认证证书,并且保存在浏览器中,大小不超过4kb,默认有效期是永久,除非手动删除,作用是用来存储用户信息。在没有cookie以前,网页刷新一次就得重新登录一次,于是为了提高网页交互得体验便有了cookie。Cookie是一个文本信息用来记录该用户状态,当浏览器再请求该网站时,浏览器把请求的网址和
Cookie一起提交给服务器。服务器就会核对检查该Cookie,以此来辨认用户状态,从而来确定用户是否需要重新登录(如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。)。由于cookie是存储在客户端的,不在服务器端存储,所以会有一些风险。例如:别人拷贝你的cookie,用你的身份认证登录你的账号等。为了避免这样的情况,便有了session。
session
服务器的安全机制,每次浏览器访问服务器由服务器生成session保存在服务器中,然后返回sessionID至浏览器,当需要验证用户身份时,就将sessionID自动加载到请求中发送给服务器,当sessionID失效时,会返回新的sessionID,sessionID的默认有效期时30分钟,可以在后台代码中修改有效期,没有大小限制。有了session之后,客户端就不存储session,而是在服务器上面存储。每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加(在内存中运行)。再后来为了避免服务器内存的消耗便出现了token。
token
服务器的安全机制,主要是解决了session对于服务器资源占用过大的问题,服务器不再存储session,而是存储一种加密算法,一般由userid+密匙组成。这样子是在客户端存储,通过加密算法和密匙制造一个签名,这个签名和数据一起作为token , 由于密钥别人不知道, 就无法伪造token了。
个人理解
由于cookie存储在本地并且是由文件形式一起提交给服务器就会有被拷贝和抓取数据包等风险。于是为了避免,则有了session,session存储在服务器上面,并且是通过http请求头(https加密)一起提交服务器,比较安全,但是,用户同时较多时服务器负担大。于是有了token,token通过算法和密匙(类似对暗号)的形式避免数据被修改(修改后算法和密钥算的结果与原来不一样)。
以上是我个人的一些理解,如有不对,多多指出。