学习过servlet的都知道,servlet是单例多线访问的,所以我们不能设置servlet成员变量来存放浏览器的访问数据。怎么解决浏览器的访问数据,让不同访问者能够访问到自己的数据呢?
相信学习完了cookie和session技术之后,读者会明白这个问题。
我们在浏览器上使用http协议在网络上传输数据的时候,服务器对于http的状态处理有两个方式,cookie和session。
笔者对于cookie设session的理解是这样的:当我们想要记录浏览器与服务器之间的交互的时候,通常的方法就是
1。cookie技术
服务器接收到浏览器的访问,于是浏览器把这次访问的信息写到浏览器并存放到客户端上。我们把这种技术称之为cookie技术。
2.session技术
浏览器访问服务器的时候,获取一些数据,为了下次访问时,访问同样的数据。服务器把这些数据存放到服务器文件上。
cookie简介
cookie--遵守RFC2965标准,记录客户端的操作并且保存到浏览器所指定的文件夹上。由此可见,cookie是不安全的。在使用cookie的时候不应该让其实现复杂的业务逻辑和保存重要的数据。
常见cookie应用:购物车,浏览脚印等。
cookie的特点:
1.服务器只能够以文本的方式向客户端写内容
2.客户端可以组织服务器写入
3.只能拿自己Web应用写入的东西
4.cookie有两种存储方式:窗口cookie存储和文本cookie储存。前一种有自己的生命周期,其生命周期的时间设置由服务器来完成,后一种写入客户端内存,可以永久保存。
session简洁:
在某段时间内,连接客户端与服务器之间的“交易”。在servlet/JSP中,如果浏览器不支持cookie,可以通过URL携带或者是表单携带的方式来实现session技术。如果客户端在一定之间内没有操作,服务器会根据tomcat根目录/conf/web.xml配置文件中的:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
来指定session的连接期限。上面的配置显示,如果操作30分钟该session没有操作,难么将会终止会话。cookie属于Cookie类,但是session不同,session属于HttpSession类。
session的特点:
1.session实例占据服务器的独立内存,所以session和cookie不同,session没有文件路径的访问限制。
2.session和客户端的窗口一一对应。
3.由sessionID标示session实例,sessionID由服务器生成。
4.客户端发送sessionID获取session实例的方式:
(1).存放在cookie中
(2).URL+?+JSESSIONID=sessionID携带
(3).嵌入表单:<input type="hidden" name="JSESSIONID" value="输入sessionID的值">
5.如果浏览器设置为不支持cookie,那么就不能使用cookie获取sessionID。
6.cookie数据存放在客户端上,对于安全性较高的数据,不能够使用cookie的方式获取sessionID。只能使用URL携带+加密的方式。
7.session生命周期可以油setMaxInactiveIntervall(生命周期值)指定,也可以服务器配置文件web.xml中指定。
cookie常见方法:
.new Cookie(String,Object);使用键值对构造cookie对象
.setMaxAge();设置cookie的生命周期
resp.addCookie(cookie对象);把cookie写入浏览器
req.getCookies();获取当前目录极其子目录的全部cookie对象
.getName();获取cookie保存的键名称
.getValue();获取cookie保存的值
session常见方法:
.getAttributNames();/.getAttribut(String name); 获取所有的属性名或者是根据属性名获取属性值。
.getCreateTime();获取当前session实例化的时间。
.getId();获取session的ID码。
.getMaxInactiveInterval();设置session生命周期。
.invalidate();清除HttpSession实例。
.isNew();判断是否为最新的session对象。
.setAttribute(String name,Object obj);设置session键值对属性内容
.setMaxInactiveInterVal();设置HttpSession的生命周期。