在servlet规范中,HttpServletSession的获取时通过调用request.getSession(boolean createnew)方法来实现,其实现机制可以简单的理解为: 存在一个大的hashMap结构,key就是jsessionid,而valule是HttpservletSession对象。 request.getSession(boolean createnew)方法通过jsessionid来获取对应的HttpservletSession,如果不存在并且参数createnew= true,则创建一个新的HttpservletSession对象,并设置jsessionid=session.getId() ,保存到hashMap结构中。以后再传递这个jsessionid.
jsessionid的传递可以是以下途径
1. 放在cookie中
Cookie: JSESSIONID=abcrmF3Gx-5Z-hhkgHfzr
2. 以参数形式放在url
http://10.3.2.35:11280/wmail/welcome.action?jsessionid=abcQNqiT4C01rg-necLBr
3. 用form表单传递,通常是用隐藏域
<input type="hidden" name="jsessionid" value="abcQNqiT4C01rg-necLBr"/>
4. url重写
http://10.3.2.35:11280/jid=abcQNqiT4C01rg-necLBr/wmail/welcome.action
或者
http://10.3.2.35:11280/wmail/welcome.action;jsessionid=abcQNqiT4C01rg-necLBr
如果当前还没有jsessionid则当然就无法获取,通常用户第一次访问或者登录前就是这种情况.
可以通过request.getRequestedSessionId() 方法来获取本次http 请求的jsessonid值。
获取到的HttpServletSession对象
如果HttpServletSession对象是已经存在的,则
1. session.isNew()=false
2. request.getRequestedSessionId() == jsessionid == session.getId()
如果HttpServletSession对象是调用request.getSession(true) (简写的request.getSession()方法等同于request.getSession(true) )时新创建的,则有以下特征:
1. session.isNew()=true
2. 以后传递的jsessionid=session.getId()
注意这里,如果request.getRequestedSessionId() 是空值,情况比较简单,以后传递jsessionid=session.getId()就是了。
但是如果request.getRequestedSessionId() 不是空值,通过这个值没有获取到已经存在的session对象,而是返回了一个新的session对象,这个时候新的session.getId()和原有的request.getRequestedSessionId() 关系如何呢?下面详细阐述这种情况。
比较JsessionID和Cookies
http本身是无session的,无法跟踪客户端的信息,换句话说:http协议不管是谁联接自己。
为了实现session,必须有浏览器支持。浏览器可以用cookie存储session,这是最通用的做法。
但是,如果我自己写一个完全符合http协议的浏览器,但是不配合服务器的session要求,那么服务器就无法产生session。
好在现在的浏览器都支持session要求,即使关闭了cookie,浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空间中的,不保存在硬盘cookie中。
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.
在http的报文格式里面cookie和session是在同一个包文位置上的
如果ie发现包文里面包含cookie/session的信息的话,他会根据安全级别来决定是否保存相关信息,比如,如果安全机制允许使用cookie那么ie将把cookie的信息保存到临时文件里面,每次在请求服务器文件的时候会把收到的session的信息加入到请求的报文里面,这就是session保存信息的原理。如果安全机制不允许使用cookie的话,虽然ie收到了cookie和session的信息,那么cookie的信息不会被写入临时文件,当ie再次请求服务器文件的时候,也不会把收到的session的信息加入到请求报文里面,服务器就无法知道session的信息了。
分享到:
相关推荐
在Java编程中,转换IE(Internet Explorer)的JSESSIONID涉及到Web应用程序的会话管理。JSESSIONID是一个由服务器分配的唯一标识符,用于跟踪用户的会话状态,尤其是在使用HTTP无状态协议时。这个标识符通常通过...
以下是一些关于Cookie的关键知识点: 1. **存储位置**:Cookie是以文本文件的形式存储在用户的计算机上。这些文件通常保存在浏览器的缓存或特定的Cookie文件夹中。 2. **生命周期**:如果没有设置有效期...
描述中提到的“博文链接:https://eggbucket.iteye.com/blog/1350360”,虽然没有提供具体的内容,但可以推测这是一个关于httpSession深入分析或者使用技巧的博客文章。通常,这样的文章可能会包含以下知识点: 1. ...
JsessionID是Tomcat服务器对Session ID的特定称呼,本质并无区别。 2. **接口测试**:项目中测试了大约15个接口,发现了约40个Bug,包括偶发性问题。线上出现问题时,首要任务是在测试环境中复现问题,以便确定是否...
1. **避免使用`FileReference`**:最简单粗暴的方法是直接放弃使用`FileReference`上传文件,转而采用传统的表单提交(`form post`)方式进行文件上传。这种方法能够确保上传过程与普通HTML页面一致,并且能更好地处理...
JSESSIONID=b6b486a8919e4fc196358e10b6a82a2b?__ajax=true`。 8. **获取基础信息的接口**: - **当前用户信息**:通过`http://127.0.0.1:8080/jeesite/a/sys/user/info`获取。 - **区域列表**:调用`...
以下是关于这些注解的详细说明: 1. **@PathVariable** - `@PathVariable` 用于从URI模板变量中获取值。当使用`@RequestMapping`与URI模板一起定义控制器方法时,如`/pets/{petId}`,`{petId}`就是一个模板变量。...
这段代码首先检查`JSESSIONID` Cookie是否存在,如果存在,则使用`<bean:cookie>`创建一个Bean并绑定到page作用域。然后,可以在JSP脚本中通过scripting变量访问这个Bean的属性。 总的来说,Struts标签库极大地简化...
例如,要读取名为“JSESSIONID”的cookie,可以使用以下代码: ```jsp <logic:present cookie="JSESSIONID"> <bean:cookie id="jSession" name="JSESSIONID"/> <!-- 输出cookie的名称和值 --> 这个cookie的名称...
hash $cookie_jsessionid; ``` 这种解决方案可以在Nginx不能直接获取客户端IP或需要更精确控制session分配的情况下提供更好的灵活性。需要注意的是,使用upstream_hash需要确保Nginx版本支持,并且可能需要安装和...
另外,实例代码中提及的“jsessionid”和“cmd”参数可能和163邮箱的会话管理以及具体的接口调用相关。这种接口调用方式可能需要遵守特定的协议或约定,开发者在使用时需要仔细阅读相关文档或API说明。 以上就是...
在示例中,`logic:present cookie="JSESSIONID"`检查JSESSIONID Cookie是否存在。 4. **Nested Tags**: Nested Tags扩展了其他标签库的功能,允许标签之间的嵌套。这使得在复杂结构的页面布局中更加灵活,能够更...
3. **JSESSIONID**:Cookie中的JSESSIONID通常用于跟踪用户会话。在上述请求中,它可能表示攻击者试图利用已存在的会话或者模拟合法会话来绕过身份验证。 4. **安全性配置**:Apache Tomcat的安全配置非常重要,应...
- **请求页面格式**:为保持会话状态,需在请求URL后添加会话ID(JSESSIONID),且必须使用大写字母表示,格式如下: - `URL="请求URL"+";JSESSIONID="+会话ID` - **示例**:假设会话ID为`b6b486a8919e4fc196358e10...
而 `@CookieValue` 注解则用于获取请求中的 Cookie 值,如获取 `JSESSIONID`: ```java @RequestMapping("/displayHeaderInfo.do") public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) {...
以下是关于Session的详细解释: 1. **定义** Session,即“会话”,是指用户从打开浏览器访问网站到关闭浏览器之间的连续交互过程。在Web开发中,Session主要用来存储用户在会话期间的相关信息,如登录状态、...
-- jsessionId的path为 / 用于多个系统共享jsessionId --> <property name="path" value="/" /> <property name="httpOnly" value="true"/> </bean> <!-- 缓存相关配置 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...
ProxySet stickysession=JSESSIONID|jsessionid nofailover=On *:80> ServerName your.domain.com ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ ``` 这段配置将请求分发到...
2. **登录获取Cookies:** 在测试开始前,需要手动登录商城系统,获取JSESSIONID以用于后续的测试。 3. **创建测试商品:** 设置一个商品,其价格为100元,初始库存为25000件,低于测试的并发数,以便检测超卖情况。...
Java面试中的关键知识点涵盖了Web开发中的核心概念,尤其是关于请求处理、状态管理和安全性。以下是对这些知识点的详细解释: 1. **转发与重定向的区别**: - **转发(Forward)**:发生在服务器端,一次HTTP请求...