1.Cookie
Cookie技术是将用户的数据存储到客户端(浏览器)的技术。
(1) 创建Cookie
Cookie cookie = new Cookie(String cookieName, String cookieValue);
response.addCookie(cookie); //向客户端写Cookie
则 cookie会以响应头的形式发给客户端
注.cookie中只能存储少量字符串信息,字符串不能有空格,尽量不要存中文。
(2) Cookie的有效期
设置Cookie的有效期:cookie.setMaxAge(int seconds); ---时间秒
注:*如果不设置持久化时间,cookie存储在浏览器的内存中,浏览器关闭cookie信息销毁 (会话级别的cookie)
*如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里
例如:设置cookie信息在浏览器的磁盘文件中存储的时间是半分钟,过期浏览器自动删除该cookie信息
(3) 设置Cookie的携带路径
如果不设置Cookie的path,Cookie也是有路径的。这个路径就是请求的路径
在请求http://localhost/day01/servlet时,服务器响应了一个Cookie,那么这个Cookie的默认路径就是/day01/
在请求http://localhost/day01/servlet/hello时,服务器响应了一个Cookie,这个Cookie的默认路径就是/day01/servlet/
也就是说,在访问子路径时,会包含其父路径的Cookie,而在访问父路径时,不包含子路径的Cookie
(4) 设置js脚本禁止访问Cookie
cookie.setHttpOnly(true);
如果cookie中设置了HttpOnly属性,则通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。
2.HttpSession
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。
(1) 获取Session对象
Tomcat容器会给每一个客户端用户创建一个session对象
HttpSession session = request.getSession();
//如果当前用户的session对象不存在,创建session对象,如果存在,直接获取
session.getId()
//JSESSIONID
HttpSession session = request.getSession(false);
//只获取当前用户的session对象,获取不到抛出异常
判断当前session会话,是否是新创建出来的
boolean isNew = session.isNew();
(2) HttpSession 对象存储数据
Session也是存储数据的区域对象,所以session对象也具有如下三个方法:
session.setAttribute(String name, Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
(3) HttpSession 对象的生命周期
public void setMaxInterval(int interval)
设置Session的超时时间 (以秒为单位) ,超过指定的时长,Session就会被销毁
*值为正数的时候,设定Session的超时时长。
*负数表示永不超时 (极少使用)
public int getMaxInactiveInterval()
获取Session的超时时间
public void invalldate()
让当前Session会话马上超时无效
Session的默认超时时长为30分钟
因为在Tomcat 服务器的配置文件web.xml 中默认有以下的配置,它就表示配置了当前Tomcat服务器下的所有Session超时配置默认时长为:30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
如果说,希望你的web工程默认的Session的超时时长为其他时长。你可以在你自己的web.xml配置文件中做以上相同的配置。就可以修改你的web工程所有Session的默认超时时长。
如果说,你只是想修改个别的超时时长,就可以使用上面的API setMaxlnactivelnterval (int lnterval);
来进行单独的设置。
session.setMaxInactivelnterval (int lnterval);
单独设置超时时长