web开发|问题与解决(用 jQuery Ajax 发送请求,后端获取 session 为空)

最近在做错题集的 web 开发课程设计,根据以往的经验前端和后端数据传输我大部分都在用 session。最近刚学习并运用了 Ajax 技术,当我像以前一样在后端更新 session 时,发现前端没有获取新的 session 数据,由此我打算认真来学习一下 session ,之前只会用,不知道背后的原理。


希望路过的大佬们可以指点一二,同时也希望给遇到同样困惑的小伙伴提供帮助
为了了解session,我去哔哩哔哩上寻找了一些视频,在这个系列中收获挺多:终于有人将cookie,session,token鉴权讲明白了,老师一节课带你精通。第一个视频讲了HTTP协议和它的特点,第二个视频将了cookie的原理,学到这里,我在我的 javaweb 项目里尝试应用一下 cookie,因此又参考了以下几个视频
参考:
  • Cookie_服务端生成Cookie
  • Cookie_服务端获取并解析Cookie
  • Session_Session的工作原理
当我查找 session 的资料时,cookie 也冒出来了,通过学习以上几个视频,我知道了 session 中其实就用到了 cookie,怪不得讲 session 的时候离不开 cookie。
在这里概括一下 session 的原理:
  1. 当用户发出第一次请求的时候,后端中的 servlet 通过 request.getSession()获取到 session,然后再在这个 session 中放入属性
    此时,底层服务器做的事情是:
    ① 生成 32 位长度的随机字符串,然后创建一个 session 对象,然后以这个 32 位长度的字符串作为 key,以新创建的 HttpSession 对象作为 value,放到 session 列表(是一个 Map)中,
    ② 另外,还把 32 位字符串包装成了一个 cookie发送给客户端,这个 cookie 的 name 就是 JSessionID,value 就是这 32 位的字符串。
  2. 当浏览器接受到这个 cookie 之后,会把这个 cookie 保存到客户端的缓存中
  3. 当客户端再次发送请求的时候,会将这个 name 为 JSessionID 的 cookie 放到请求的头部信息中然后发送给服务器。
  4. 服务器接收到这个 cookie 之后,会拿着这个 32 位的字符串到 session 列表中进行查找,找到了 key 后就找到了对应的 value,也就时存放有域属性的 session,就可以从里面读数据了。
这就是 session 的工作原理。
【web开发|问题与解决(用 jQuery Ajax 发送请求,后端获取 session 为空)】接着就是不停的查资料找错误,最终终于找到了问题:url 中的 localhost 写成了 127.0.0.1 !
// ajax请求数据 $.ajax({ type: 'POST', url: "http://localhost:8080/CuoTiJi/saveCuoti", …… })

同时,xhr 请求也带上了期待的 cookie:
web开发|问题与解决(用 jQuery Ajax 发送请求,后端获取 session 为空)
文章图片

    推荐阅读