java 容器url中jsessionid释疑解惑ITeyeitjob - 乐橙lc8

java 容器url中jsessionid释疑解惑ITeyeitjob

2019-02-01 09:01:08 | 作者: 敬曦 | 标签: 办法,运用,用户 | 浏览: 1852

jsessionid释疑解惑


该文章转自
https://www.blogjava.net/zhaozhenlin1224/archive/2010/02/03/311807.html
感谢长辈的心境劳作,能够让咱们坐收渔利。


在web运用的开发中咱们会经常看到这样的url:https://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x b=x。这跟一般的url根本相同,只要一个当地有差异,那就是“;jessionid=xxxxxxxx”。这个参数有时分有,有时分又没有,说它是参数可又跟一般传递的参数不同,它是紧跟在url后边用分号来分隔的,用一般的request.getParameter()办法还取不到。那这个参数到底是干嘛用的呢?要了解它还要先了解session的完成办法。

session的完成办法

做web开发的同学都知道,http是无状况的会话协议,也就是说无法保存用户的信息。那假如有一些信息需求在用户的阅读活动中一向坚持,该怎样做呢?咱们能够把这些信息在每次恳求的时分作为参数传递给服务器,但这样做既费事又消耗资源,这时分就表现出了session的重要性。session是web开发中不可或缺的一个特性。它是关于一个特定的用户恳求,在web服务器上保存的一个全局变量。有了它咱们就能够把用户的一些信息保存在服务器上,而不用在服务器和客户端之间来回传递。知道了session的效果,那session是怎样完成的呢?服务器上为每个用户都保存了一个session,那当用户恳求过来的时分是怎样知道某一个用户应该对应哪个session呢?这时jsessionid就派上用场了。每一个session都有一个id来作为标识,这个id会传到客户端,每次客户端恳求都会把这个id传到服务器,服务器依据id来匹配这次恳求应该运用哪个session。jsessionid就是客户端用来保存sessionid的变量,主要是针对j2ee完成的web容器,没有研究过其他言语是用什么变量来保存的。一般关于web运用来说,客户端变量都会保存在cookie中,jsessionid也不破例。不过与一般的cookie变量不同,jsessionid是保存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个阅读器窗口的时分会创立,在封闭这个阅读器窗口的时分也一起毁掉。这也就解说了为什么session变量不能跨窗口运用,要跨窗口运用就需求手动把jsessionid保存到cookie里边。

jsessionid的效果

在以上的文字中咱们了解了session的完成原理,一起也知道了session跟jsessionid严密不可分割的联络。只要经过jsessionid才能使session机制起效果,而jsessionid又是经过cookie来保存。看到这儿,或许你会发现一个问题,假如用户禁用了cookie,那jsessionid不是就不能保存了吗?session不是不起效果了吗?咱们真的对此束手无策了吗?当然不是。在用户禁用了cookie时分,咱们能够经过url重写来完成jsessionid的传递。这就是我上面指出的那样的url:https://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x b=x..。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的可用性。

说道这儿,我们应该对jsessionid和session的联系,以及jsessionid的效果有个了一个大致的了解,详细运用还要自己在项目中详细情况详细对待。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章