首页 > 其他分享 >web开发中会话跟踪的方法

web开发中会话跟踪的方法

时间:2022-12-28 15:11:41浏览次数:39  
标签:web 请求 中会话 用户 token session cookie 跟踪 服务器

为什么要对会话进行跟踪?

主要原因是因为 HTTP 请求是无状态的;只有当用户发出请求时,服务器才会做出响应,客户端与服务端之间的联系是离散的、非连续的;如果用户想在同一个网站的多个页面之间转换时,无法确定是否是同一个用户;对会话进行跟踪就是为了解决这样的问题。

常用的会话跟踪技术

token(令牌 )

token 是无状态的,是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 token 并返回给客户端,以后客户端只需带上这个 token 前来请求数据即可,无需再次带上用户名和密码。tokens 是多用户下处理认证的最佳方式

最简单的 token 组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,使用 hash/encrypt 压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。
用户认证流程:  

  1、第一次请求服务器,服务器根据用户信息返回对应的 token 给浏览器。
  2、浏览器接收到 token 并保存到请求头以及 localStorage / cookie /sessionStorage 里。
  3、用户再次向服务器发起请求时,服务端会验证请求头中的 token,如果验证不成功说明用户没有登录或者登录失效,如果验证成功证明用户已经登录可执行后面操作。

token优势:

  1、无状态,可扩展和解耦:后端不需要保持 token 的记录,每个 token 都是独立的,服务器端的工作只需要在登录成功后校验 token 是否有效就可以了。
  2、支持移动端设备
  3、支持跨程序调用
  4、安全:加密的字符串,只是在服务端解密判断有效性

cookie

cookie 是服务器生成,发送给浏览器,并以键值对的形式保存在某个目录下的文本文件内,会在浏览器下次向服务器发起请求时被携带并发送给服务器。由于 cookie 是存在客户端的,所以服务端需要加入一些限制确保 cookie 不会被恶意使用;每一个域的 cookie 数量是有限的。

session

session 是有状态的, 存储于服务器或者硬盘中,可以理解为一个状态列表,拥有一个唯一识别符号 sessionID ,客户端通常存放于 cookie 中。服务器收到 cookie 后解析出 sessionID ,再去 session 列表中查找,才能找到相应 session。依赖cookie,如果 cookie 被禁用也可以放在 url 中。

用户认证流程:

  1、第一次请求服务器,服务器根据用户信息创建 session 并返回对应的 sessionID 给浏览器。
  2、浏览器接收到 sessionID 并保存到 Cookie 里,同时 Cookie 记录 sessionID 属于哪一个域名。
  3、用户再次向服务器发起请求时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在会自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 sessionID,再根据 sessionID 查找对应的 session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 session 证明用户已经登录可执行后面操作。
  4、如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session 会丢失。

标签:web,请求,中会话,用户,token,session,cookie,跟踪,服务器
From: https://www.cnblogs.com/xt112233/p/17010126.html

相关文章

  • javaweb 8、JSP
    什么是JSPJavaServicePages:java服务器端页面,也和Servlet一样,用于动态web技术最大特点:写JSP就像在写HTML区别:HTML只给用户提供静态的数据JSP页面中科院嵌入java代......
  • WebAssembly _ 转发
    原文:https://www.cnblogs.com/linguoguo/p/12125584.html 最近,WebAssembly在JavaScript圈非常的火!人们都在谈论它多么多么快,怎样怎样改变Web开发领域。但是没有......
  • webpack5 配置多线程和缓存加快构建速度
    webpack5内置了缓存配置在webpack配置对象下,增加:cache:{type:'filesystem',allowCollectingMemory:true}webpack5可以通过引入 threa......
  • org.springframework.web.bind.ServletRequestDataBinde
    org.springframework.validationClassDataBinder​​java.lang.Object​​org.springframework.validation.DataBinderAllImplementedInterfaces:​​PropertyEditorRe......
  • [PHP]用socket写一个简单的WEB服务器
    今天我就要把我的最新研究成果展示看看,而不玩ARMBIAN了,因为刷了两台S905L3的发现一点挑战都没有从0.2写WEB服务难啊,你需要懂HTTP协议和SOCKET!不过有经验我们很快就可以搭......
  • sb+websocket实例
    1、pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star......
  • 【译】2022 年回顾:Web 性能有哪些新变化?
    原文地址:https://www.debugbear.com/blog/2022-in-web-performance若对文中提到的一些性能参数不太熟悉,可以参考我之前的一篇博文《性能参数和优化手段》。......
  • webpack-dev-server
    Tip如果你碰到了问题,请将路由导航至 /webpack-dev-server 将会为你展示服务文件的位置。例如: http://localhost:9000/webpack-dev-server。Tip如果你需要要手动重新......
  • WebUI自动化必备技能-HTML和css知识详解
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 学习w......
  • JavaWeb
    JavaWeb1、基本概念1.1前言静态webhtmlcss动态web技术栈:Servlet/JSP、ASP、php动态web资源开发技术统称为JavaWeb1.2web应用程序:可以提供浏览......