最近在做错题集的 web 开发课程设计,根据以往的经验前端和后端数据传输我大部分都在用 session。最近刚学习并运用了 Ajax 技术,当我像以前一样在后端更新 session 时,发现前端没有获取新的 session 数据,由此我打算认真来学习一下 session ,之前只会用,不知道背后的原理。为了了解session,我去哔哩哔哩上寻找了一些视频,在这个系列中收获挺多:终于有人将cookie,session,token鉴权讲明白了,老师一节课带你精通。第一个视频讲了HTTP协议和它的特点,第二个视频将了cookie的原理,学到这里,我在我的 javaweb 项目里尝试应用一下 cookie,因此又参考了以下几个视频
希望路过的大佬们可以指点一二,同时也希望给遇到同样困惑的小伙伴提供帮助
参考:
- Cookie_服务端生成Cookie
- Cookie_服务端获取并解析Cookie
- Session_Session的工作原理
在这里概括一下 session 的原理:
- 当用户发出第一次请求的时候,后端中的 servlet 通过
request.getSession()
获取到 session,然后再在这个 session 中放入属性
此时,底层服务器做的事情是:
① 生成 32 位长度的随机字符串,然后创建一个 session 对象,然后以这个 32 位长度的字符串作为 key,以新创建的 HttpSession 对象作为 value,放到 session 列表(是一个 Map)中,
② 另外,还把 32 位字符串包装成了一个 cookie发送给客户端,这个 cookie 的 name 就是 JSessionID,value 就是这 32 位的字符串。 - 当浏览器接受到这个 cookie 之后,会把这个 cookie 保存到客户端的缓存中
- 当客户端再次发送请求的时候,会将这个 name 为 JSessionID 的 cookie 放到请求的头部信息中然后发送给服务器。
- 服务器接收到这个 cookie 之后,会拿着这个 32 位的字符串到 session 列表中进行查找,找到了 key 后就找到了对应的 value,也就时存放有域属性的 session,就可以从里面读数据了。
【web开发|问题与解决(用 jQuery Ajax 发送请求,后端获取 session 为空)】接着就是不停的查资料找错误,最终终于找到了问题:url 中的 localhost 写成了 127.0.0.1 !
// ajax请求数据
$.ajax({
type: 'POST',
url: "http://localhost:8080/CuoTiJi/saveCuoti",
……
})
同时,xhr 请求也带上了期待的 cookie:
文章图片
推荐阅读
- javaScript高级|Ajax第四天笔记总结
- 爬虫|python爬虫学习44
- 前端|ajax 和 axios、fetch的区别
- 前端面试|JS的继承方法
- javaScript|AJAX基础使用
- 前端面试|webpack
- #yyds干货盘点#--30分钟上手jQuery
- WordPress中的”未捕获的TypeError($不是函数” [重复])
- web|如何用vs新建Asp.net项目(Web页面)