java url后面带sessionid_url中jsessionid的理解

2023-05-16

(1)

这是一个保险措施

因为Session默认是需要Cookie支持的

但有些客户浏览器是关闭Cookie的

这个时候就需要在URL中指定服务器上的session标识,也就是5F4771183629C9834F8382E23BE13C4C

用一个方法(忘了方法的名字)处理URL串就可以得到这个东西

这个方法会判断你的浏览器是否开启了Cookie,如果他认为应该加他就会加上去

(2)

链接1:wapbrowse.jsp?curAlbumID=9 ;

链接2:wapbrowse.jsp;jsessionid=5AC6268DD8D4D5D1FDF5D41E9F2FD960?curAlbumID=9;

这两个链接是从模拟器运行时生成的source中拷贝过来的,两个链接都是指向wapbrowse.jsp,链接1由于不包含 jsessionid,所以在wapbrowse.jsp中变量为null,通过链接2打开wapbrowse.jsp可以正常访问session 变量

(3)

URL重写功能,为了防止一些用户把Cookie禁止而无法使用session而设置的功能.jsessionid后面的一长串就是你服务器上的session的ID号,这样无需cookie也可以使用session.

(4)

http本身是无session的,无法跟踪客户端的信息,换句话说:http协议不管是谁联接自己。

为了实现session,必须有浏览器支持。浏览器可以用cookie存储session,这是最通用的做法。

但是,如果我自己写一个完全符合http协议的浏览器,但是不配合服务器的session要求,那么服务器就无法产生session。

好在现在的浏览器都支持session要求,即使关闭了cookie,浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空间中的,不保存在硬盘cookie中。

(5)

sessionid是作为一个临时cookie放在浏览器端的。

session的具体信息放在服务器端。

每次浏览器发出的请求,都会在http header里 带上 sessionid来标识自己。

既然用Struts,顺便再把JSTL用上,

下面一个非常有用的标签:

清单 12. 操作的语法

var="name" scope="scope">

...

URL 重写是由 操作自动执行的。如果 JSP 容器检测到一个存储用户当前会话标识的 cookie,那么就不必进行重写。但是,如果不存在这样的 cookie,那么 生成的所有 URL 都会被重写以编码会话标识。注:如果在随后的请求中存在适当的 cookie,那么 将停止重写 URL 以包含该标识。

参考:http://www-900.ibm.com/developerWorks/cn/java/j-jstl0318/index.shtml

(6)

方法一:url中紧跟servlet/jsp文件名加;jsessionid=sessionId,其中sessionId由 HttpSession.getId()得到,如http://localhost:8080/aaa /bbb.jsp;jsessionid=saldjfsdflsaeir234?para=1¶2=2

方法二:在application(ServletContext)里保存一个session管理器HashMap:sessionId--- sessionRef,这样可以在所有的servlet/jsp里调用,这需要在url里将sessionId以参数形式传递,如http: //localhost:8080/aaa/bbb.jsp?sessionId=saldjfsdflsaeir234?para=1¶2=2,在服务 器端用request.getParameter("sessionId")获取

(7)

session是在服务器端保存。服务器根据url请求中的session_id来查找对应的session。

以一个bbs为例,网站需要根据每个请求url获取用户的信息,如果以cookie方式,用户信息全部是存放在cookie中的,这样可能会不安 全;如果以session方式,用户信息可以存放在服务器端,服务器只要从http请求中得到session_id,就可以得到存放在session中的 用户信息了,这样安全性比较高。session在服务器中的表现方式依服务器而定,可能是写到临时文件中,也可能直接放在内存中。

服务器从http请求中得到session_id的方式有两种:cookie和url重写。如果客户端启用cookie,那么 session_id可以保存在cookie中;如果禁用cookie,就用url重写方式,在url中添加.jsessionid=xxxxx参数部 分,服务器会试图从url中得到.jsessionid参数作为session_id.

(8)

cookie 是保存在客户端的文本格式数据,session是客户端登录到应用,由服务器为该客户端建立的唯一的标识,可以在session里面保存该客户端的数据比如说用户帐号。

一般cookie可以用来保存你的登录帐号和密码,在你登录到应用服务上,自动添加到登录界面或直接发送到服务器上进行登录,这就是你经常能在论坛上看到的你的登录信息保存一年的选项 的实现方式

(9)

在http的报文格式里面cookie和session是在同一个包文位置上的

如果ie发现包文里面包含cookie/session的信息的话,他会根据安全级别来决定是否保存相关信息,比如,如果安全机制允许使用 cookie那么ie将把cookie的信息保存到临时文件里面,每次在请求服务器文件的时候会把收到的session的信息加入到请求的报文里面,这就 是session保存信息的原理。如果安全机制不允许使用cookie的话,虽然ie收到了cookie和session的信息,那么cookie的信息 不会被写入临时文件,当ie再次请求服务器文件的时候,也不会把收到的session的信息加入到请求报文里面,服务器就无法知道session的信息 了。

jessionid通过这样的方式来从客户端传递到服务器端,从而来标识session。

注意一点,jsessionid跟一般的url参数传递方式是不同的,不是作为参数跟在"?"后面,而是紧跟在url后面用";"来分隔。

这样在用户禁用cookie的时候我们也可以传递jsessionid来使用session了,

只不过需要每次都把jseesionid作为参数跟在url后面传递。

那这样岂不是很麻烦,每次请求一个url都要判断cookie是否可用,

如果禁用了cookie,还要从url里解析出jsessionid,然后跟在处理完后转到的url后面,以保持jsessionid的传递。

这些问题sun当然已经帮我们想到了。

所以提供了2个方法来使事情变得简单:response.encodeURL()和response.encodeRedirectURL()。

这2个方法会判断cookie是否可用,如果禁用了会解析出url中的jsessionid,并连接到指定的url后面,如果没有找到jessionid会自动帮我们生成一个。

至于为什么要有2个方法?这2个方法有什么不同?google了一下,说是这2个方法在判断是否要包含jsessionid的逻辑上会稍有不同。

在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。

这2个方法的使用方法如:response.sendRedirect(response.encodeURL("/myapp/input.jsp"));。

如果cookie没有禁用,我们在浏览器地址栏中看到的地址是这样的:/myapp/input.jsp,如果禁用了cookie,我们会看到:/myapp/input.jsp;jsessionid=73E6B2470C91A433A6698C7681FD44F4。

所以,我们在写web应用的时候,为了保险起见,应该在程序里的每一个跳转url上都使用这2个方法,来保证session的可用性。

以前很少遇到这样的问题,今天又涨见识了...

相关资源:通过HttpURLConnection获取SESSIONID_java获取sessionid-Java文档...
————————————————
版权声明:本文为CSDN博主「相拥冰山」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36313743/article/details/114211429

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java url后面带sessionid_url中jsessionid的理解 的相关文章

  • gazebo创建机器人模型06

    gazebo创建机器人模型05 kinect 信息仿真以及显示 kinect摄像头仿真基本流程 xff1a 1 已经创建完毕的机器人模型 xff0c 编写一个单独的 xacro 文件 xff0c 为机器人模型添加 kinect 摄像头配置
  • 【C++】C++中防止头文件重复包含的两种方法

    文章目录 01 错误分析 xff1a 类型重定义 xff08 头文件重复包含 xff09 02 解决方案2 1 微软宏2 2 条件编译2 3 两种方法比较 03 变量被重复包含3 1 解决办法 04 版权声明 amp 总结 01 错误分析
  • C/C++程序员应聘常见面试题深入剖析

    1 引言 本文的写作目的并不在于提供C C 43 43 程序员求职面试指导 xff0c 而旨在从技术上分析面试题的内涵 文中的大多数面试题来自各大论坛 xff0c 部分试题解答也参考了网友的意见 许多面试题看似简单 xff0c 却需要深厚的
  • Nvidia jetson tx2 详细安装、配置教程以及固定ip

    jetson tx2 是什么 一 硬件组装 xff1a 1 将 Wi Fi 天线插上 xff0c 组装好充电器即可 2 接口介绍 xff1a USB接口只有一个 xff08 建议使用USB拓展 xff0c 方便前期配置的时候连接键盘鼠标 x
  • C语言 用指针实现字符串函数 strlen strcpy strcat strcmp

    目录 一 指针模拟实现strlen 函数 1 strlen 函数description 2 用指针实现且将strlen封装 3 运行结果 二 指针模拟实现strcpy 函数 1 strcpy 函数description 2 用指针实现且将s
  • 常用器件介绍

    常用器件介绍 这篇文章主要介绍一些在做电子设计时最最常见的器件 xff0c 针对的是完全的小白们 面包板 首先是搭建设计电路用的面包板 面包板正面图 背面拆解图 面包板是专为电子电路的无焊接实验设计制造的 xff0c 上面有很多小插孔 各种
  • VScode代码格式化解决方案c/c++

    前贴链接 xff1a https tieba baidu com p 7891213649 之前说过研究出来了会和大家分享一下自己是如何解决的 xff0c 于是就有了此贴 首先要说明 xff0c 本文主要是针对c c 43 43 xff0c
  • C语言输入和输出

    文章目录 一 数据输入二 数据输出三 断章取义四 printf输出1 输出描述性的文字2 输出整数3 输出字符4 输出浮点数5 输出字符串6 输出多个内容7 示例 xff08 book12 c xff09 五 scanf输入1 输入整数2
  • c 和 python语法 对比

    直接干货 xff1a 先稍微了解两种语言的基本不同 pythonc执行方式无需手动编译 xff0c 执行时按行读取 xff0c 自动编译成字节码 所以python可轻易被获取源码需要手动进行编译生成机器可直接执行的机器码内存管理有自己的垃圾
  • 删除typora图片目录下失效的图片脚本

    背景 xff1a md中插入图片与word不同 xff0c 在word中图片是拷贝了一份放在文件中 xff0c 与原图片无关 xff0c 所以无论删除哪个互不影响 xff0c 但是md中却不同 xff0c md中插入图片时用超链接的方式从外
  • scanf中‘\n‘的用法和隐患

    读到这篇文章的人90 的可能是遇到了输入字符后 xff0c 回车没有预期的输出 xff0c 连续回车都没用 这种情况可能是因为你在scanf中加了 n xff0c 而且加了不该加的地方 把代码里的 n删了或者再输入一个不是 n的字符再回车
  • c语言使用一维数组实现杨辉三角

    通常使用在实现杨辉三角时使用的时使用二维数组的方式 xff0c 这种方式比较快捷 xff0c 且比较好理解 xff0c 但是使用二维数组浪费了大量的空间 xff0c 又大概一般的空间未被使用 如果使用一维数组进行计算能大大提高空间利用率 首
  • 链表、结构体和数组对比

    结构体和数组 1 结构体可以存不同类型的元素 而数组只能存同一类型 2 结构体类型需要我们自已定义 数组是用别的类型加 元素个数 3 结构体内存分配方式很特别 使用对齐原则 不一定是所有元素的字节数和 而数组一定是所有元素的字节数和 4 结
  • C和C++那些事儿

    1 new delete malloc free关系 delete会调用对象的析构函数 和new对应free只会释放内存 xff0c new调用构造函数 malloc与free是C 43 43 C语言的标准库函数 xff0c new del
  • 排序和复杂度

    常见的排序方式 1 冒泡排序 xff1a 时间复杂度 xff1a 最好情况是 O n xff0c 最坏情况是 O n2 空间复杂度 xff1a 开辟一个空间交换顺序O 1 2 快速排序 xff1a 时间复杂的 xff1a 最好情况是 O n
  • 文件IO过程

    基本概念 xff1a 文件描述符 xff1a xff08 文件描述符有时称为文件句柄 xff09 进程级 xff09 文件描述符是一个简单的整数 xff0c 用以标明每一个 被 进程所打开的文件和socket 通常0 1 2被标准输入 标准
  • private与构造函数

    通常我们都将构造函数的声明置于public区段 xff0c 假如我们将其放入private区段中会发生什么样的后果 xff1f 没错 xff0c 我也知道这将会使构造函数成为私有的 xff0c 这意味着什么 xff1f 我们知道 xff0c
  • 使用VS Code连接远程服务器

    目录 一 VS Code的安装与下载 二 安装插件 三 添加服务器连接配置 四 连接服务器 一 VS Code的安装与下载 关于VS Code的安装与下载及VS Code的使用方式详见如下链接 VSCode安装教程并配置C C 43 43
  • C语言 转换10进制为16进制

    实际上就是除16取余然后将其本身除以16 xff0c 得到的这一个数将它转换为具体的16进制数字的过程 xff0c 当然最后还要注意前面的字符位置的添加 span class token comment 进制之间互相转换 xff1a 将十进
  • TCP协议是如何保证传输可靠性的

    TCP确保传输可靠性的方式 校验和序列号 确认应答超时重传连接管理流量控制 xff08 滑动窗口控制 xff09 拥塞控制 校验和 xff1a TCP校验和是一个端到端的校验和 xff0c 由发送端计算 xff0c 然后由接收端验证 其目的

随机推荐

  • TCP的三次握手与四次挥手详解

    文章目录 TCP 协议简述TCP包首部TCP 三次握手建立连接TCP 四次挥手关闭连接常见面试题 xff1a TCP 协议简述 TCP 提供面向有连接的通信传输 xff0c 面向有连接是指在传送数据之前必须先建立连接 xff0c 数据传送完
  • IP数据报格式及分片与重组

    IP数据报 在 TCP IP 协议中 xff0c 使用 IP 协议传输数据的包被称为 IP 数据报 xff08 也叫数据包或数据报文 xff09 xff0c 每个数据包都包含 IP 协议规定的内容 IP协议提供不可靠无连接的数据报传输服务
  • mysql锁机制

    MySQL的锁机制 文章目录 MySQL的锁机制1 行锁2 表锁3 页锁4 乐观锁和悲观锁4 1悲观锁4 2乐观锁5 1InnoDB锁的特性 首先对mysql锁进行划分 xff1a 按照锁的粒度划分 xff1a 行锁 表锁 页锁按照锁的使用
  • uboot开发流程

    uboot其实就是一段比较复杂的单片机代码用来作为引导程序 xff0c 它的主要任务是初始化硬件设备 xff0c 将系统的软硬件环境带到一个合适的状态 xff0c 再将内核从一种存储介质读入到内存中 xff0c 然后跳到内核的入口点去运行
  • java的几种IO

    Java IO方式大体上可以分为三类 xff0c 基于不同的io模型可以简单分为同步阻塞的BIO 同步非阻塞的NIO和异步非阻塞的AIO IO又主要可以分为文件IO和网络IO 针对Java的网络IO模型 xff0c 可以看网络IO模型 xf
  • 哈希冲突和一致性哈希

    文章目录 哈希冲突处理哈希冲突1 开放地址法2 再散列法3 链地址法4 建立一个公共溢出区 一致性哈希普通 hash算法普通 hash 算法的缺陷 一致性哈希算法一致性 hash 算法的优点hash 环的倾斜与虚拟节点 哈希冲突 哈希函数又
  • Redis IO多路复用理解

    IO多路复用在Redis中的应用 Redis 服务器是一个事件驱动程序 xff0c 服务器处理的事件分为时间事件和文件事件两类 文件事件 xff1a Redis主进程中 xff0c 主要处理客户端的连接请求与相应 时间事件 xff1a fo
  • 分布式理论CAP,BASE

    什么是CAP理论 xff1f CAP理论指的是一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和分区容错性 xff08 Partition to
  • javaEE接收request参数以及输出结果到html页面

    1 引入需要的类 这里需要注意 xff0c servlet类不是jre自带的 xff0c 需要自己添加 添加相关类主要有以下两种方式 xff1a 下载servlet api jar xff08 tomcat自带 xff09 然后添加到cla
  • 西门子博途数据块(DB块)快速导入导出

    有些人可能会想用查表法计算CRC校验码 查表法效率和速度都很高 但是空间换时间 让你用几秒钟时间 把一张完整的表存入博途里 就算了你单身20年的手速估计也完成不了 想要几秒钟完成也不是不可以 就是导入别人的源文件 拿来主义当然块 继续上图
  • opencv4.0学习笔记

    目录 课程来源 xff1a 哔哩哔哩大学 第一节课 显示第一张图片 环境配置了一个早上 xff0c 到10 48分配置完毕 xff0c 有点难受 还好最后显示出第一张图片 include span class token operator
  • 程序人生

    http zhan renren com itonline from 61 template amp checked 61 true
  • 传感器的使用(一)-火焰传感器

    火焰传感器的介绍 1 工作电压 xff1a DC 3 3V 5V 2 灵敏度可调 xff08 可调电位器 xff09 3 工作温度 xff1a xff0d 10 xff0b 50 4 设有固定螺铨孔 xff0c 方便安装 5 探测角度 60
  • 传感器的使用(二)-温湿度传感器DHT11(HAL库实现)

    温湿度传感器的介绍 DHT11技术性能特征 工作电压范围 xff1a 3 3V 5 5V 工作电流 xff1a 平均0 5mA 输出 xff1a 单总线数字信号 测量范围 xff1a 湿度20 90 xff05 RH xff0c 温度0 5
  • Makefile详解及使用

    内容来自大丙老师的blog Makefile简介 linux环境下 xff0c 当用户编译文件过多的时候 xff0c 使用makefile可以帮助模块化编译文件 xff0c makefile是一个脚本文件 xff0c 根据规则 xff0c
  • QT绘制实时动态曲线——qcustomplot使用(二)

    在QT绘制实时动态曲线 qcustomplot使用 xff08 一 xff09 中 xff0c 介绍使用官方的demo实现动态实时曲线 官方代码移植 针对动态显示数据项目要求 xff0c 移植官方代码demo 开启绘图的函数 span cl
  • QT的多种功能使用记录

    设置控件的边角为圆角 xff1a border top left radius 设置左上角圆角 border top right radius 设置右上角圆角 border bottom left radius 设置左下角圆角 border
  • MYSQL之视图的使用

    视图的使用 使用视图的好处 1 简化select的字段 xff0c 方便管理 2 可以针对不同用户 xff0c 对视图进行不同的查看 也就是说可以做权限管理 3 视图的语法 CREATE VIEW MYTEST AS select 列车号
  • 模糊PID之matlab模糊控制器配置

    前言 使用模糊PID时 xff0c 需要对工具库进行配置 xff0c 模糊PID是由2个输入个3个输出组成 xff0c 输出是E和Ec xff0c 输出是Kp Ki和Kd 打开matlab后 xff0c 需要配置 MATLAB模糊配置 1
  • java url后面带sessionid_url中jsessionid的理解

    1 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识 也就是5F4771183629C9834F8382E23BE13C4C 用