首先http 协议是无效的,所以退出后,再次进入需要重新请求登录,无法判断是否登录过。
随着时代进步,web可以进行购物,无法记录哪些人进行了哪些操作,此时有了,session会话 。
客户端发送请求到服务端,服务端产生session id 存在服务器上,每次请求带着session id过来,就可以区分;但存在一个问题,服务器要保存成千上万的id ,很难受,服务器很累啊。
如果搭建服务器集群,负载均衡;假设小A登录服务器A,id保存在服务器A上,下次小A的请求转发到服务器B 上,服务器B没有id,识别不了,还得重新登录。
如果把服务器A说的id 粘到服务器B上,但是多台服务器搬来搬去,也很麻烦。
后来叫Memcached的人想出,把session id集中放在一个地方,存储,但是这个地方要是废掉了也很麻烦,也可以搞集群,但是也很麻烦,小小的id搞得头疼。
于是有人想到,可否让客户端进行保存,服务器不想干这个事。
当小A访问服务器时,可以给他返回一个token令牌,这个令牌中带有user id(账户密码) +HMAC-SHA256算法 +密钥,当小A再次登录时,通过user id(账户密码) +HMAC-SHA256算法 +密钥再计算一次token,与请求头中的token进行对比,相同,可登录,不同,没有访问权限不可登录;
这样服务器只需提供计算功能,不用存贮大量的id,他很开心!
总结:
1.Session会话:服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
1.session和cookie区别:
数据存放位置不同:Session数据是存在服务器中的,cookie数据存放在浏览器当中。
·安全程度不同:cookie放在服务器中不是很安全,session放在服务器中,相对安全。
·性能使用程度不同:session放在服务器上,访问增多会占用服务器的性能;考虑到减轻服务器性能方面,应使用cookie。
·数据存储大小不同:单个cookie保存的数据不能超过4K,session存储在服务端,根据服务器大小来定。
2.token和session区别:
token是开发定义的,session是http协议规定的;
token不一定存储,session存在服务器中;
token可以跨域,session不可以跨域,它是与域名绑定的。