参考cookie与session详解与区别

随着响应式web应用的兴起,我们在浏览网站是常常需要进行登录,验证用户信息。但是http请求是无状态的,为了实现用户验证,我们需要将http请求中添加请求信息,实现用户登录。常用的方法有cookie,session,以及token技术

cookie和session

cookie是由服务器产生的,存放在浏览器的用于实现用户身份验证的文件。是浏览器在电脑硬盘中开辟的一款空间。
cookie以域名的形式进行区分,cookie数据有过期时间,超过时间自动删除,并且我们在访问服务器的时候自动发送对应cookie。
session是用户访问服务器时,服务器生成的用于辨别用户的对象。存储在服务器内存中,每一条session对象都有一个sessionid作为唯一标识。

当客户端访问服务器端的时候,服务器根据用户提交的信息在session对象中生成sessionid,并且在session中记录用户的信息,将sessionid发送给客户端,储存在cookie中,当客户端再次访问服务器时,根据客户端的cookie来验证客户端身份。

Cookie的不可跨域名性
Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

token

尽管session和cookie能解决用户身份验证的问题,但是仍然存在弊端。当用大量用户访问时,服务器将要产生大量session信息,占用很多服务器资源。同时也会带来可拓展性的问题。
这就诞生了token技术。

token将用户信息进行加密生成数字签名,并将这个签名和数据一起发送给客户端进行储存,当客户端请求服务端时,再次对数组进行加密,和之前发送的签名进行比对,如果比对成功,就能完成用户身份验证了。
这样的话,服务器不需要存储用户信息也能对用户进行身份验证,提高了服务器的效率。

token的优势

  1. 无状态,可拓展
  2. 支持移动设备
  3. 跨程序调用