在上面使用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地址全部使用以上方法进行重新编码”

修改以上程序

  1. 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的更多相关文章

  1. java学习笔记—使用HttpSession实现QQ的访问记录(31)

    1. 编写QQ空间数据类(QQS.java) public class QQS { private static LinkedHashMap<Integer, String> qqs = ...

  2. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  3. HttpSession与Hibernate中Session的区别

    一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户 ...

  4. 被我们忽略的HttpSession线程安全问题

    1. 背景 最近在读<Java concurrency in practice>(Java并发实战),其中1.4节提到了Java web的线程安全问题时有如下一段话: Servlets a ...

  5. HttpSession

    (Cookie是用来设置浏览器保存数据的时间的: Session是只要浏览器不关闭,数据则会存在,一旦关闭浏览器数据即消失 ) 1. HttpSession概述 * HttpSession是由Java ...

  6. JSP中的 HttpSession、pageContext对象

    pageContext 隐含对象对应javax.servlet.jsp.PageContext,都自动的被加入至pageContext中, 您可以由它来取得与JSP相关的对应之Servlet对象,像是 ...

  7. JavaWeb学习笔记——开发动态WEB资源(八)cookies和httpsession

    会话: cookies: (1)cookies是WEB服务器发送到浏览器的简短文本信息 (2)cookies可以禁用 httpsession: 一次会话是从你打开浏览器开始到你关闭浏览器结束 提供一种 ...

  8. HTTP-Session工作机制

    HTTP-Session将HTTP这种无状态协议通过session来保存状态.然而session通过记录服务器生成编号来标识协议,从而服务器就可以识别协议的状态. session保存服务器端,  co ...

  9. HttpSession的线程安全问题及注意事项

    摘自http://blog.csdn.net/java2000_net/article/details/2922357 HttpSession session =  request.getSessio ...

随机推荐

  1. Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟

    A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...

  2. PAT甲级1034. Head of a Gang

    PAT甲级1034. Head of a Gang 题意: 警方找到一个帮派的头的一种方式是检查人民的电话.如果A和B之间有电话,我们说A和B是相关的.关系的权重被定义为两人之间所有电话的总时间长度. ...

  3. SSE两个页面的相互通信

    两个页面之间互相通信 首先搭建express框架,然后通过two页面发送数据给服务器,服务器把数据传送给one页面 在two 中发送数据,在one中显示 router/index.js var axi ...

  4. 用ldapsearch验证LDAP认证信息

    企业里面各种各样的系统,堆积多了以后帐号数不胜数,比较好的解决方案之一是用LDAP.不过Microsoft的ActiveDirectory认证是否成功需要有命令来进行验证,可以通过ldapsearch ...

  5. ExtJS 表单 submit时错误处理

    这里不提success,提提Extjs 表单提交的failure方法. 在表单的提交中,当发生异常行为时通常分为三种情况 1. 无法连接到服务器 2. 表单验证错误 3. 业务逻辑错误 对应下面的代码 ...

  6. ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法

    应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法   NS ...

  7. ubuntu下从源码编译安装cherokee

    apt-get install automake autoconf libtool rrdtool libpam0g-dev libssl-dev libgeoip-dev libldap2-dev ...

  8. 破解NET的四大神器[转]

     原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...

  9. Python可执行对象——exec、eval、compile

           Python提供的调用可执行对象的内建函数进行说明,涉及exec.eval.compile三个函数.exec语句用来执行存储在代码对象.字符串.文件中的Python语句,eval语句用来 ...

  10. Replace Pioneer 试用推广

    Replace Pioneer: http://www.mind-pioneer.com 目前合法长期使用Replace Pioneer的唯一方法(除了购买之外): Replace Pioneer过期 ...