本地測試地址為http://localhost/TEST/login.jsf

當瀏覽器打開cookie時,瀏覽器第一次與服務器建立連接,會創建一個session,並生成一個id即jsessionid,通過response header中的set-cookie方法傳遞給client,當server判斷request中沒有包含jsessionid的cookie時,就是通過URL改寫機制向client傳信息。

在首次瀏覽器與服務器建立連接的請求中,request中並沒有發現保存著jsessionid的cookie,所以會將jsessionid通過追加到URL的方式傳回給client,見下圖2。也就是此時的地址變為http://localhost/TEST/login.jsf;jsessionid=1FBE8ABA3F5CDF90A2C00CDB24840685。從request header中也可以看到,此時client接收到了jsessionid,並將它保存在cookie中,並在每次請求中都會攜帶。可以在後台通過request.getRequestSessionId()的方式查看請求中是否包含session id,當然也可以通過request.getSession().getId()的方式獲取每次創建會話的session id。

當瀏覽器關閉cookie時,即瀏覽器不允許讀取cookie,那麼每次登陸瀏覽器頁面或者在頁面中發起請求,都可以看到response header中存在set-cookie,且每次生成的session id都不同,這是因為瀏覽器不允許讀寫cookie,所以瀏覽器與服務器創建會話時便會重新創建session,生成新的session id。而由於每次request header中都不會包含jsessionid的cookie,所以jsessionid會通過改寫URL的方式傳給client,也就是地址會變為http://localhost/TEST/login.jsf;jsessionid=xxx

jsessionid通過重寫url的方式傳給client這種方式傳給client其實非常不安全,有很多博客寫了,具體哪些看其他博客分析。我們將如何避免:

tomcat7可以通過在web.xml的session-config中設置tracking-mode。<tracking-mode>用于表示容器应该使用哪种技术追踪会话id,它有三個合法值可供選擇。設置URL則會將jsessionid顯示在地址欄中,不安全;設置SSL是最安全的方式,但要求所有请求都必须是HTTPS;最後設置為COOKIE,會將jsessionid儲存在cookie中,即使瀏覽器禁用了cookie,也不會將jsessionid顯示在url上

一些有用的網址

https://fralef.me/tomcat-disable-jsessionid-in-url.html

https://blog.csdn.net/weixin_30840573/article/details/96675887

https://www.jianshu.com/p/f2e5db637ed4

jsessionid與cookie關係的理解的更多相关文章

  1. 【转载】保哥 釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係

    我常常不仅仅逛 博客园,还会去找国外,特别是台湾的技术部落格,发现好的文章,我便会收录,今天我转载或者全文复制,在Google 博客园,一位叫保哥, 釐清 CLR..NET.C#.Visual Stu ...

  2. 智课雅思词汇---十七、前綴il-, in-, ir-, im-有什麼關係

    智课雅思词汇---十七.前綴il-, in-, ir-, im-有什麼關係 一.总结 一句话总结:这几个长得非常像,并且意思也非常像 1.前綴il-, in-, ir-, im-是什麼意思? 前缀:i ...

  3. JavaWeb中Cookie会话管理,理解Http无状态处理机制

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512995108961387015/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  4. sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)

    ---sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計) ---2014-08-26 塗聚文(Geovin Du) CREATE PROCEDURE proc_Select_BookKi ...

  5. cppoop作业:Inheritance+Composition 關係下的構造和析構

    Inheritance+Composition 關係下的構造和析構 哪个的ctor先被调用. 父类先于组件类调用 构造函数

  6. 关于tomcat7服务下面js无法获取JSESSIONID的cookie信息

    http://tomcat.apache.org/tomcat-5.5-doc/config/context.html Does anyone know what changed in the con ...

  7. 对Cookie和Session的理解

    本篇文章系自己总结经验,如果有朋友感觉哪里有问题,欢迎留言评论,谢谢~! Cookie和Session的产生背景: 在动态页面里面,每个变量都是有有效期的,所有的变量的最大生命周期就是一个脚本的周期( ...

  8. cookie,session,token的理解

    Get  POST 区别异同点 淘宝token的 理解   过程算法 防止伪造请求  伪造相对难 简单发展史  登录的操作: 哪些人往自己的购物车中放商品,  也就是说我必须把每个人区分开,这就是一个 ...

  9. session和cookie的最深刻理解

    先说session 对SESSION的争论好象一直没有停止过,不过幺麽能理解SESSION的人应该占90以上.但还是讲讲,别嫌老~ 有一些人赞成用SESSION,有一些人不赞成.但这个问题到底要怎么说 ...

随机推荐

  1. <密码学系列>—信息安全威胁

    懒惰等于将一个人活埋.--泰勒 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路! ...

  2. session跨域丢失问题

    配置一个 filter package com.psm.filter; import javax.servlet.*; import javax.servlet.http.HttpServletReq ...

  3. svn和 android adt的 eclipse插件更新地址

    下边这两个插件的更新地址是每次安装android开发环境时都能用到的,为了方便在这里记录一下. android adt: http://dl-ssl.google.com/android/eclips ...

  4. [洛谷P4012] [网络流24题] 深海机器人问题

    Description 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生 ...

  5. python + selenium定位页面元素的办法

    1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...

  6. 指定表单使用的路由 Specifying the Route Used by a Form

  7. Java学习笔记(二) 面向对象---构造函数

    面向对象---构造函数 特点 函数名与类名相同 不用定义返回值类型 不写return语句 作用 对象一建立,就对象进行初始化. 具体使用情况 class Student { Student(){ Sy ...

  8. [校内训练19_09_02]C

    题意 给出一棵N 个节点的树,树上的每个节点都有一个权值$a_i$. 有Q 次询问,每次在树上选中两个点u, v,考虑所有在简单路径u, v 上(包括u, v)的点构成的集合S. 求$\sum_{w∈ ...

  9. Docker深入浅出系列 | Image实战演练

    目录 课程目标 Container与Image核心知识回顾 制作Docker Image的两种方式 Dockerfile常用指令 Image实战篇 通过Dockerfile制作Image 通过Dock ...

  10. svg图片在vue脚手架vue-cli怎么使用

    第一种 使用vue2-svg-icon npm install vue2-svg-icon --save-dev` 下载之后在mian.js引入 名字可以随便起,这里我起icon 引入svg资源 这时 ...