url中的jsessionid解释
(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的可用性。
以前很少遇到这样的问题,今天又涨见识了...
资料来自互联网:http://sizhefang.iteye.com/blog/25294
url中的jsessionid解释的更多相关文章
- cas的url中去掉jsessionid
Servlet3.0规范中的<tracking-mode>允许你定义JSESSIONID是存储在cookie中还是URL参数中.如果会话ID存储在URL中,那么它可能会被无意的存储 在多个 ...
- [转] Tomcat 禁用URL中的JSESSIONID
[From] http://stackoverflow.com/questions/962729/is-it-possible-to-disable-jsessionid-in-tomcat-serv ...
- Apache Shiro去掉URL中的JSESSIONID
如果你的shiro版本在1.3.2版本以上这个BUG已经解决只需要在配置文件如下配置中添加红色部分 <!-- 会话管理器 --> <bean id="sessionMana ...
- Shiro去掉URL中的JSESSIONID的解决方案
shiro版本在1.3.2版本以上这个BUG已经解决,只需要在配置文件如下配置中添加红色部分即可 <!-- 会话管理器 --> <bean id="sessionManag ...
- url中jsessionid的理解
(1) 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识,也就是5F4771183629 ...
- 通过Javascript得到URL中的参数(query string)
我们知道,"GET"请求中,通常把参数放在URL后面,比如这样http://www.cnblogs.com/season-huang/index?param=yes&art ...
- 你知道url中的特殊符号含义么
1.# #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如,http://www.example.com/index.html#print就代表网页index.html的print位置.浏 ...
- 033 Url中特殊字符的处理
在url跳转页面的时候,参数值中的#不见了,一直没有处理,今天有空看了一下,后来发现后台的过滤器之类的都没有处理,就比较奇怪了,原来是特殊字符的问题. 一:Url中的特殊字符 1.说明 这里还是需要做 ...
- SpringBoot2.0 url中出现特殊符号「带括号{}'"等等」时会抛出400错误
访问 http://127.0.0.1:8080/api?method=taxiong.goods.list¶ms={"page":1,"pageSize ...
随机推荐
- POJ_1321——棋盘问题,回溯+剪枝
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- JDK、JRE和JVM的区别与联系
首先来说一下JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK). JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime E ...
- Beanstalkd(ubuntu安装)
安装Beanstalkd # apt-get install beanstalkd Unubtu 开启beanstalkd的持久化选项 #vim /etc/default/beanstalkd 把S ...
- 设置MyEclipse的右击新建后面的选项
转自:http://blog.sina.com.cn/s/blog_929b09ac010197g6.html,做了修改 最近发现在MyEclipse右击后,新建后面的菜单选项太少了,新建一个文件,还 ...
- 将vs2012建的项目转换为vs2010项目
vs2012建的项目vs2010打不开,但vs2010的项目vs2012能打开,所以我觉得vs2012没有对解决方案进行重大的调整,尝试修改了一下.sln文件,使用vs2010就能打开了,方法如下: ...
- 数据库和linq中的 join(连接)操作
sql中的连接 sql中的表连接有inner join,left join(left outer join),right join(right outer join),full join(full o ...
- android 分辨率自适应
1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 A ...
- repo的小结
repo仅仅是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库. 1. 下载 repo 的地址: http://android.git.kern ...
- Spring下@ResponseBody响应中文内容乱码问题
引言: 在JQuery的Ajax请求中,收到的基于后台返回回来的结果出现乱码,在后台其内容正确,到了前台之后,确是乱码??????,该怎样解决呢? 1. 问题的提出 前端基于JQuery的Ajax进 ...
- [小工具] Command-line CPU Killer(附源码及下载链接)
博主有次在拆卸自己的笔记本电脑后,发现电脑如果静置时间长了有时会重启,但奇怪的是当我自己在电脑前工作的时候从来没有重启过.据此推测可能 CPU 完全空闲的时候风扇完全停转了,虽然 CPU 温度不高,但 ...