session的原理

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留

1.session在一台服务器的时候:如下图。

实际上单台服务器存sessionid向cookie中。之后相互校验就可以了,这个可以很简单的理解。单台服务器只能存几百个session差不多就满了,这是因为session在空间开销上非常大,完全可以自己写一个,在内存上 static map,因为session实际上也是键值对,如果没有value值的话,可以写 set, set只存key,这样开销就更少了,当然这个前提是只传一串数字。只用于登录的话,

session还能存其他的,这里就不介绍了。


 

2.多台服务器的时候:Token

token只是一个cooike所带的name值,当时多台服务器的时候,nginx负载均衡会将请求发送的不同的服务器,不可能每台服务器都存session这样就太浪费了,也不好用。如果一个人登录到QQ空间,难道每次进一个页面如果发送的是不同的页面就需要登录这样是不是非常麻烦,客户体验极差。

这时候token应运而生,所谓的token只是一个键值对,这时候需要一个缓存数据库redis,redis可以满足亿级甚至更多的数据。

每次nginx负载均衡时,发送到一个服务器,都会先去缓存数据库redis去验证token如果value值和cooike的相对应,那么就不用登陆,直接访问了。token只是一个唯一的key值,当然如果你想要隐蔽性非常强的话,token你可以取不同的名字。希望下面的图可以让你懂得。

 

猜你喜欢

转载自blog.csdn.net/qq_33188563/article/details/81544971
今日推荐