网站首页 文章专栏 PHP框架搭建之session和token的抉择

PHP框架搭建之session和token的抉择

编辑时间:2020-04-13 17:34:37 作者:苹果 浏览量:2134


    前言:最近搭建一个后端框架,不知道该不该使用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。客户端调用数据的时候检查登录时间区分不同客户端



    出自:何冰华个人网站

    地址:https://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论