php框架打印session,PHP框架搭建之session和token的抉择

最近搭建一个后端框架,不知道该不该使用session,值得深入研究下session和token的区别

session和token的抉择

session: 用来保持用户与服务器的会话。浏览器在第一次访问服务器时,服务器会创建一个session,然后同时为该session生成一个唯一的会话sessionid,然后服务器再把sessionid(名字为JSESSIONID的cookie),以cookie形式发送给客户端。浏览器再次访问时会携带cookie中的sessionis,然后服务器根据sessionid找到对应的session进行匹配。

如果浏览器禁用了cookie/不支持cookie,可以通过URL重写的方式发送到服务。

简单的说,session就是个缓存,读取这个缓存的key存在客户端。

token:服务器不去存储用户的信息,一般是前端登录后,后端生成一个标识性字符串(token)给前端,之后前端每次请求都带上这个token,后端通过这个token获取对应的用户信息。

简单的说,token不需要服务器存储用户信息,但是每次要去解析这个token

区别:

session翻译为会话,token翻译为令牌。

session是空间换时间,token是时间换空间。

session和sessionid:服务器会保存一份,可能保存到缓存/数据库/文件。

token:服务器不需要记录任何东西,每次都是一个无状态的请求,每次都是通过解密来验证是否合法。

前后端分离建议使用token,小型的用户登录操作系统建议使用session

引申--选择了token之后 JWT 和 Oauth2的抉择

OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, github登录某个app)

JWT是用在前后端分离, 需要简单的对后台API进行保护时使用.(前后端分离无session, 频繁传用户密码不安全)

因此,做普通项目的PI开发,用JWT最为合适,后期真的做到了微信那种程度,需要别人到你这来授权登录,在用OAuth2。

使用JWT的建议:

因为JWT的header和payload部分都是可以解密出来的,所以不能放私密信息,所以建议不要放置用户名等信息,可以再用户注册地时候生成一个唯一字符串,作为用户唯一标识uuid,在payload中标识出来,类似于微信的openid。用户从一个客户端登录时,记录下用户的登录时间,精确到毫秒,避免同时点击登录时由于是秒而不能区分不同的客户端。缓存在服务器的时候用uuid作为key,登录时间作为value。客户端调用数据的时候检查登录时间区分不同客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值