HttpSession 和URLRewriting
在上面使用Cookie技术存储会话信息的时候发现Cookie存储的数据有限,而且每次需要客户端浏览器携带数据,导致网络的负载过大。因此如果需要存储相对大量的数据,那么可以直接将数据存储在服务器端,这样可以提高数据的访问速度。
HttpSession技术就是将会话的数据存储在服务器端,便于开发者直接进行访问。
获取HttpSession对象
HttpSession getSession() ->如果有直接返回,如果没有直接创建并返回
HttpSession getSession(boolean create) -> true同上,false有返回,没有null
总结:
HttpSession技术底层需要借助Cookie存储服务器端为每一个用户创建的HttpSession对象的ID值,便于后面拿到该值获取服务器指定对象中值。
现在实际的浏览器在启动多个同一个浏览器窗口,那么自动使用同一个Session对象。一旦Session的有效时间超过了半个小时那么Session自动销毁。
SessionID 在客户端是存储在浏览器的内存中,并没有放入文件。经过测试,当关闭浏览器 再打开的时候访问session对象失效了。但是只有一个浏览器不关闭且打开另外的页面,能够访问到session对象。客户端中的sessionId保存在浏览器内存中
以上的代码将用户的浏览记录存储在了session对象中,但是该对象是在服务器内存中的,且有有效的时间限制,如果时间到了,那么session就会被销毁。
默认的时间为半个小时(30分钟)。
配置Session的有效时间
在每一个网站的web.xml中可以配置该网站创建的session对象的有效时间。注意的是配置时单位是分钟。
Thread.slessp(毫秒单位)、Cookie.setMaxAge(秒单位)、session(分钟单位)
多学一招:到底Session需要设置多长时间?
该对象在服务器的内存中如果时间设置越长那么服务器的session对象就会越多。
但是如果指定时间过短,存储的数据没有意义。
推荐不要修改默认的session的过期时间。
实战:假定你现在打开了当当网在购物,此时已经添加了3个商品,但是刚好来了一个客人需要聊天。等聊天结束后大发现再次单击购买的时候session过期了。
Cookie的禁用
Cookie可以利用客户端存储会话数据。
HttpSession可以利用Cookie存储SessionID信息。
其实在浏览器的设置中可以拒绝网站发送回来的Cookie信息。
当选择组织所有Cookie的时候,sesion技术就不能用了。
此时再访问以上的案例就会导致空指针异常出现。如果需要将网站修复,那么必须使用URLRewriting技术。
URLRewriting技术
分析以上问题的原因:
服务器创建好了Session对象,但是由于浏览器禁止了Cookie的接收,那么服务器无法将创建好的Session的ID值以Set-Cookie的响应头方式发送给浏览器进行存储,那么在第二访问的时候也就不会懈怠SessionID,因此无法找到Session。
常用的方法
String encodeRedirectURL(String url) ->给指定的重定向路径后添加Sessionid信息
String encodeURL(String url) -> 给普通的URL地址添加Sessionid信息
实施的原则:
“将页面中的所有的URL地址全部使用以上方法进行重新编码”
修改以上程序
- ListServlet.java
String path = "/day08/store?num="+num;
path = response.encodeURL(path);
out.println("<a href='"+path+"'>"+name+"</a>");
2. StoreQQServlet.java
String path = "/day08/list";
path = response.encodeRedirectURL(path);
response.sendRedirect(path);
HttpSession 和URLRewriting的更多相关文章
- java学习笔记—使用HttpSession实现QQ的访问记录(31)
1. 编写QQ空间数据类(QQS.java) public class QQS { private static LinkedHashMap<Integer, String> qqs = ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- HttpSession与Hibernate中Session的区别
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户 ...
- 被我们忽略的HttpSession线程安全问题
1. 背景 最近在读<Java concurrency in practice>(Java并发实战),其中1.4节提到了Java web的线程安全问题时有如下一段话: Servlets a ...
- HttpSession
(Cookie是用来设置浏览器保存数据的时间的: Session是只要浏览器不关闭,数据则会存在,一旦关闭浏览器数据即消失 ) 1. HttpSession概述 * HttpSession是由Java ...
- JSP中的 HttpSession、pageContext对象
pageContext 隐含对象对应javax.servlet.jsp.PageContext,都自动的被加入至pageContext中, 您可以由它来取得与JSP相关的对应之Servlet对象,像是 ...
- JavaWeb学习笔记——开发动态WEB资源(八)cookies和httpsession
会话: cookies: (1)cookies是WEB服务器发送到浏览器的简短文本信息 (2)cookies可以禁用 httpsession: 一次会话是从你打开浏览器开始到你关闭浏览器结束 提供一种 ...
- HTTP-Session工作机制
HTTP-Session将HTTP这种无状态协议通过session来保存状态.然而session通过记录服务器生成编号来标识协议,从而服务器就可以识别协议的状态. session保存服务器端, co ...
- HttpSession的线程安全问题及注意事项
摘自http://blog.csdn.net/java2000_net/article/details/2922357 HttpSession session = request.getSessio ...
随机推荐
- csv文件导入到mysql
如何将csv文件导入到mysql数据库呢,方法有很多但最简单粗暴的方法还是用sql语句啦,像下面这样. LOAD DATA LOCAL INFILE 'csv文件路径' INTO TABLE 数据表名 ...
- PID控制原理和算法
闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测量出实际与计划发生偏差时,按定额或标准来进行纠正的.比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制路线上.提到闭环控 ...
- 一些值得学习的Unity教程 (很实用的包括源码)
***********************项目源码******************************** 1. 降临 2. 沉睡缤纷乐 3. 千炮捕鱼 4. Photon官方FSP示例 ...
- sessionid与cookie
转自:http://smiky.iteye.com/blog/649164 发现自己真的是很笨,过去一直用jsp,从来不用怕心用户信息放在session里面会找不到,现在不用jsp,前台全用html, ...
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
记录量大的情况下,采用NOT IN查询,那肯定会慢的无法接受.比如: SELECT A.* FROM TABLE_A WHERE A.USER_ID NOT IN (SELECT B.USER_ID ...
- 做考试系统用到的关于onbeforeunload一些兼容性问题
最近做考试系统,一些效果存在一些兼容性问题,尤其是ie6,本人js不是很好,通过查资料解决了这些问题,现总结下: 关于onbeforeunload问题: 考试时离开页面需要提示,但是直接用此方法或on ...
- 不要用cudnn7.2,用7.3可以兼容
tensorflow1.11.0 非常的过分了[捂脸]官网上写的cuda 9.0,cudnn 7.2.然而Nvidia官网上根本没有这两个的对应...之前一直都依赖anaconda的一键安装,被惯坏了 ...
- 如何安装pip、升级pip包。mac下安装包的路径
参考:https://pip.pypa.io/en/stable/installing/ 1.wget -c https://bootstrap.pypa.io/get-pip.py 2.pytho ...
- webshell三剑客[aspxspy、phpspy、jspspy]
ASPSPY:http://www.rootkit.net.cn/article.asp?id=132<已关闭> 下载:ASPXspy2 JSPSPY:http://www.forjj.c ...
- Linux文件系统---用户与内核的交互接口
从磁盘到数据,从数据到文件,从文件到目录,从目录到文件系统,从文件系统到操作系统.构成了计算机中的IO读写机制. 整个磁盘可以分为1个MBR(Master Boot Record)和4个partiti ...