session是什么意思:网页会话,存临时状态

session是什么意思,它是服务端用来标记用户单次访问会话的存储机制,浏览器访问网站时服务端生成唯一sessionid,通过cookie传给浏览器,后续请求带上这个id就能读取绑定的数据,适合登录态、购物车、表单临时数据存储,对比cookie,数据主体保存在服务器,本地只存标识,适合需要控制数据、不想把敏感信息放在客户端的开发场景,不适合高并发无状态接口、纯静态页面、跨多个域名独立站点使用。

session的底层运行流程

你打开网站发起第一次请求,服务端校验没有携带有效的sessionid,就新建一条session记录,分配一串随机唯一字符串作为sessionid,把这个id写入响应头的cookie下发到浏览器。浏览器之后每一次发给这个站点的请求,都会自动带上这条cookie,服务端拿到id,去内存、redis或者数据库里查询对应的session数据,完成身份识别和状态读取。会话会设置超时时间,多数站点默认30分钟无操作就自动销毁这条session。

销毁有三种方式。

  • 等待超时自动失效
  • 后端主动调用清除接口销毁
  • 浏览器清空对应站点cookie,丢失sessionid

session与cookie的差异对比

类型存储位置数据安全程度单条容量上限跨域适配能力
session服务端较高较大默认不支持跨域
cookie浏览器本地偏低4KB左右可配置跨域

很多初学者会混淆二者,session依赖cookie传递标识,但二者不是同级替代关系,你可以理解cookie是运输车票,session是服务器上存放乘客信息的档案。浏览器禁用cookie的时候,传统session会失效,这时开发人员可以改写逻辑,把sessionid拼接在url参数里传递,这种方案存在参数泄露风险,一般只作为兼容兜底方案。

session常用落地场景

账号登录维持是最主流的场景,用户输入账号密码校验通过后,登录信息写入session,之后访问会员页、个人中心不用重复提交账号密码。临时表单分步提交也会使用session,用户填完第一页提交,数据先放进session,全部步骤完成后再统一入库,避免中间步骤丢数据。临时的限时活动标记、答题进度、弹窗关闭记录,这类不需要长久保存、关闭会话即可清除的数据,都可以选择session承载。

session有明确的部署约束,单机部署时默认存在服务器内存,重启服务后全部会话数据丢失,集群多服务器部署时,内存session无法在多台机器之间共享,会出现用户一会登录一会掉线的情况,这时需要把session统一迁移到redis这类中间件做集中存储,实现会话共享。

它不适合小程序、APP接口这类前后端分离的无状态业务。这类业务更偏向token机制,token自带信息,不用服务端额外查表,水平扩展更简单。session是有状态机制,每一次有效访问都需要服务端查询会话存储,访问量持续上涨时,存储组件的查询压力会逐步上升。

不要把大容量文件、长期持久数据放进session。session的设计定位就是临时会话载体,大量数据写入会拉高存储开销,超时销毁机制也会让长期保存的数据意外丢失。持久数据统一存入数据库,临时标识、轻量状态交给session处理,分工更清晰稳定。

主流开发框架都封装好了session工具,JavaServlet、PHP、Node.js的express-session都内置基础实现,你不需要手动生成id、管理存储,直接调用读写方法即可,框架已经封装好了id生成、过期清理、cookie下发整套逻辑。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于session是什么意思的文章欢迎访问:百科