赞
踩
Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。
Cookie对象的方法:
方法 | 描述 |
---|---|
public void setMaxAge(int expiry) | 设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间, 到达时间后浏览器会自动删除cookie. 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除 cookie。 |
public String getName() | 返回 cookie的名称,名称创建后将不能被修改 |
public String getValue() | 获取cookie的值 |
public void setValue(String newValue) | 设置 cookie的值 |
public Cookie(String name, String value) | Cookie类的构造器, 接受两个字符串作为键值对 |
request对象的方法:
response对象的方法:
方法 | 描述 |
---|---|
response.addCookie(cookie); | 将Cookie响应给客户端, 浏览器会将Cookie保存在本地 |
示例:
Cookie c = new Cookie("name","value");
c.setMaxAge(60); // 设置最大有效时间为60秒
response.addCookie(c); // 将Cookie响应给客户端
Cookie[] cs = request.getCookies(); // 获取请求中所有的Cookie对象的数组
for(Cookie c1 : cs){ // 遍历Cookie数组
if("name".equals(c1.getName()){ // 通过键找到指定的Cookie对象
String value = c1.getValue(); // 获取该Cookie对象的值
}
}
会话Cookie和持久Cookie
若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里。
若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这种称为持久Cookie。
Cookie具有不可跨域名性
就是说,浏览器访问百度不会带上谷歌的cookie;不同浏览器之间的Cookie也无法共享
注意:
- Cookie是存储在客户端本地的文件, 服务器无法操作该文件, 只能通过浏览器来操作
- 因为Cookie最终是存储在客户端上的文本文件, 因此Cookie的键值对都是==String类型==
- 在响应中添加Cookie要在重定向之前完成
- 用户可以禁用cookie
使用会话对象session实现, 一个会话就是浏览器与服务器之间的一次通话, 会话可以在多次请求中保存和使用数据
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
session对象的一些重要方法:
方法 | 说明 |
---|---|
public Object getAttribute(String name) | 返回session对象中与指定名称绑定的对象,如果不存在则返回null |
public String getId() | 返回session对象的ID |
public int getMaxInactiveInterval() | 返回最大时间间隔,以秒为单位,只有在设置时间内未发送任何请求才会销毁,若有操作则重写计时 |
public void invalidate() | 将session无效化,解绑任何与该session绑定的对象 |
public void removeAttribute(String name) | 移除session中指定名称的对象 |
public void setAttribute(String name, Object value) | 使用指定的名称和值来产生一个对象并绑定到session中 |
public void setMaxInactiveInterval(int interval) | 用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效. Tomcat中的默认的超时时间是30分钟。 |
public boolean isNew() | 返回是否为一个新的客户端,或者客户端是否拒绝加入session |
示例:
session.setAttribute("name", "value"); // 设置session
String v = (String)session.getAttribute("name"); // 注意: 返回得到的是Object类型的数据,需要强转
jsp自动启动session, 如果要设置关闭session功能, 如果如下设置:
<%@ session="false" %>
用户第一次访问服务器时, 服务器端会为用户创建一个独立的session对象, 并且生成一个JSESSIONID, 这个JSESSIONID在响应浏览器的时候会被装进cookie中, 从而被保存到客户端浏览器的内存中去. 当用户再一次访问Servlet时, 请求中会携带着cookie中的JSESSIONID去访问服务器, 服务器会根据这个JSESSIONID去查看是否有对应的Session对象有就拿出来使用; 没有就创建一个Session(相当于用户第一次访问)
session在下列情况下被删除:
程序调用session.invalidate()
距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
服务器进程被停止
再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。
方法一
public void setMaxInactiveInterval(int interval); //单位是秒
方法二:
在Tomcat根目录的conf文件下的web.xml文件中配置服务器默认的会话过期时间
<session-config>
<session-timeout>30</session-timeout> <!-- 单位是分钟 -->
</session-config>
注意:
- Session在客户端第一次访问服务器创建时, 存储于服务器上, 服务器会将Session响应给客户端浏览器, 存储于客户端的内存中, 当客户端关闭了浏览器后, 客户端的Session及消失
- 不同的浏览器之间, session并不通用
- session存储与服务器上, 因此一个session键值对中的值是Object类型, 可以接受所有对象类型, 但是在获取值的时候要注意, 返回的也是一个Object对象, 需要做强制类型转换.
- 重新打开浏览器或使用不同的浏览器,算一次新的会话
- 客户端的JSESSIONID采用的是cookie技术, 存储在浏览器的内存中. 浏览器关闭后JSESSIONID也随之消失. 服务端的session, 并不会随浏览器关闭而消失,只有在一定时间内无操作才会消失
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的内存性能,考虑到减轻服务器性能方面,应当使用cookie或者设置session的有效时间。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
通过向application中添加属性,则所有组成该web应用的JSP文件都能访问到这些属性。整个项目中共享使用数据.
以下是在项目中创建变量的语法:
application.setAttribute(String Key, Object Value);
读取该变量的方法如下:
application.getAttribute(String Key);
注意:
- application存储与服务器上, 因此一个application键值对中的值是Object类型, 可以接受所有对象类型, 但是在获取值的时候要注意, 返回的也是一个Object对象, 需要做强制类型转换.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。