『Java』用户登陆除了cookie和session,还有这么多解决方案
http是无状态的 , 一次请求结束 , 连接断开 , 下次服务器再收到请求 , 它就不知道这个请求是哪个用户发过来的 。 当然它知道是哪个客户端地址发过来的 , 但是对于我们的应用来说 , 我们是靠用户来管理 , 而不是靠客户端 。 所以对我们的应用而言 , 它是需要有状态管理的 , 以便服务端能够准确的知道http请求是哪个用户发起的 , 从而判断他是否有权限继续这个请求 。 这个过程就是常说的会话管理 。 它也可以简单理解为一个用户从登录到退出应用的一段期间 。 本文总结了3种常见的实现web应用会话管理的方式:
【『Java』用户登陆除了cookie和session,还有这么多解决方案】1)基于server端session的管理方式
2)cookie-base的管理方式
3)token-base的管理方式
这些内容可以帮助加深对web中用户登录机制的理解 , 对实际项目开发也有参考价值 , 欢迎阅读与指正 。
1. 基于server端session的管理 在早期web应用中 , 通常使用服务端session来管理用户的会话 。 快速了解服务端session:
1) 服务端session是用户第一次访问应用时 , 服务器就会创建的对象 , 代表用户的一次会话过程 , 可以用来存放数据 。 服务器为每一个session都分配一个唯一的sessionid , 以保证每个用户都有一个不同的session对象 。
2)服务器在创建完session后 , 会把sessionid通过cookie返回给用户所在的浏览器 , 这样当用户第二次及以后向服务器发送请求的时候 , 就会通过cookie把sessionid传回给服务器 , 以便服务器能够根据sessionid找到与该用户对应的session对象 。
3)session通常有失效时间的设定 , 比如2个小时 。 当失效时间到 , 服务器会销毁之前的session , 并创建新的session返回给用户 。 但是只要用户在失效时间内 , 有发送新的请求给服务器 , 通常服务器都会把他对应的session的失效时间根据当前的请求时间再延长2个小时 。
4)session在一开始并不具备会话管理的作用 。 它只有在用户登录认证成功之后 , 并且往sesssion对象里面放入了用户登录成功的凭证 , 才能用来管理会话 。 管理会话的逻辑也很简单 , 只要拿到用户的session对象 , 看它里面有没有登录成功的凭证 , 就能判断这个用户是否已经登录 。 当用户主动退出的时候 , 会把它的session对象里的登录凭证清掉 。 所以在用户登录前或退出后或者session对象失效时 , 肯定都是拿不到需要的登录凭证的 。
以上过程可简单使用流程图描述如下:
本文插图
主流的web开发平台(java,.net,php)都原生支持这种会话管理的方式 , 而且开发起来很简单 , 相信大部分后端开发人员在入门的时候都了解并使用过它 。 它还有一个比较大的优点就是安全性好 , 因为在浏览器端与服务器端保持会话状态的媒介始终只是一个sessionid串 , 只要这个串够随机 , 攻击者就不能轻易冒充他人的sessionid进行操作;除非通过CSRF或http劫持的方式 , 才有可能冒充别人进行操作;即使冒充成功 , 也必须被冒充的用户session里面包含有效的登录凭证才行 。 但是在真正决定用它管理会话之前 , 也得根据自己的应用情况考虑以下几个问题:
1)这种方式将会话信息存储在web服务器里面 , 所以在用户同时在线量比较多时 , 这些会话信息会占据比较多的内存;
2)当应用采用集群部署的时候 , 会遇到多台web服务器之间如何做session共享的问题 。 因为session是由单个服务器创建的 , 但是处理用户请求的服务器不一定是那个创建session的服务器 , 这样他就拿不到之前已经放入到session中的登录凭证之类的信息了;
3)多个应用要共享session时 , 除了以上问题 , 还会遇到跨域问题 , 因为不同的应用可能部署的主机不一样 , 需要在各个应用做好cookie跨域的处理 。
推荐阅读
- IT之家7/8.1用户仍可以免费升级至Win 10,外媒亲测可行:Win
- 『Java』java数据结构系列——什么是数据结构
- 「微信」facebook全球用户数达30亿,微信还有机会达到此高度吗?
- 『Apple Watch』WatchOS 7新特性!Apple Watch或通过传感器检测用户心理健康
- 我只想看球身价超1亿欧,克洛普欲打造钢铁防线!世界级铁卫或登陆安菲尔德
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- zol中关村在线iPhone一个让安卓用户落泪的小功能——快捷指令
- 小谢娱乐哦引来广大网友狂点赞,直呼炸天,程序员用Java实现扫雷小游戏
- 极客宇文氏手机的寿命到底是多久,你多长时间换一次手机?手机本身哪些部位决定了寿命用户使用习惯注定寿命
- 气垫登陆艇@花大力气引进的“野牛”船停产了吗?