session与token

1、session

session机制是服务器将需要在不同请求间沟通的数据保存在服务端,这块内容称为session,而仅仅将session的id返回给浏览器,浏览器下次请求时携带id,服务端在其本地进行读取解析。

比较:

  • 信息存储在客户端,有危险。而session的信息存储在服务端
  • cookie有大小限制,而session由于信息在服务端没有传输大小限制
  • cookie低效,session因为传输数据小所以高效
  • 当然,session在服务端会占用服务器的资源,数据过多也会导致问题

session id本质上依据是基于cookie进行传输的。一般,在访问网站的第一时间,服务器容器会默认的设置session,该session设为会话类型,带有httponly标志,不同容器的session的名称可能不同。

SESSIONID=mD3cHY2uPhvcrGDwnYL1gxPu7FAWTFH64dHVpkPivuV
PHPSESSID=4680c9df2ce9ac4d1aa7f366bd92d83a

2、token

cookie机制只能在同域或者子域进行携带,session属于cookie。而对于某些站点来说,可能具有多个互不兼容的域名,这时无法利用cookie作为登录凭证。

一个思路是设置cookie匹配多个域,但是这是跨域设置cookie,极有可能干扰其他站点,造成危害或者影响正常业务。

解决方法是放弃cookie,在请求时手动添加登录凭证。这个cookie之外的登录凭证称为token,实质是一段在登录成功后的验证文本。在之后的每次需要验证身份的请求时,携带该文本。

场景1:前后端不分离,服务端直接为响应中的html或者动态文件中的url添加token参数

场景2:前后端分离,前端ajax发起请求时,js将token拼接到url中,或者设置为头部字段,或者在请求体部中

需要注意,token的强度,以及不能直接在响应中直接在cookie中设置。

token除了实现跨域的登录状态验证,还可以在每次响应时重新设置token,实现防止csrf和表单重复提交功能。

 

 

posted @ 2023-04-18 17:56  挖洞404  阅读(35)  评论(0编辑  收藏  举报