1、Cookie
Cookie是客户端技术,保存在客户端。
1.1、Cookie的有效期
Cookie的maxAge决定着Cookie的有效期,单位为秒(Second),如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化。
如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。
如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,
如果maxAge为Integer.MAX_VALUE,则标示永久有效
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(Integer.MAX_VALUE); //永久有效
//cookie.setMaxAge(0); // 设置生命周期为0 删除
response.addCookie(cookie); // 必须执行这一句
1.2、Cookie的域名和访问路径
Cookie cookie = new Cookie("time","20080808"); // 新建Cookie
cookie.setDomain(".helloweenvsfei.com"); // 设置域名 以.helloweenvsfei.com结尾的域名都可以访问
cookie.setPath("/path/"); // 设置路径 包含/path/的路径可以获取cookie
//cookie.setPath("/"); //都可以访问
//cookie.setSecure(true); // 设置安全属性 浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie
cookie.setMaxAge(Integer.MAX_VALUE); // 设置有效期
response.addCookie(cookie); // 输出到客户端
domain属性决定运行访问Cookie的域名,而path属性决定允许访问Cookie的路径
2、Session
Session是服务器端技术。
2.1 session的创建时间
一般认为session的创建是在打开浏览器输入地址,回车的时候就创建了session。经过测试,其实不然。
session的创建需要在服务端调用了HttpServletRequest.getSession()方法时,才会被创建。
2.2、session的实现原理
服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据。
session依赖cookie,如果浏览器禁用了cookie,就需要用到URL重写了,这种方法让服务器收到的每个请求中都带有sessioinId。
1、链接
<a href='/jsp/index.jsp;jsessionid=<%=session.getId() %>' >主页</a>
或者
<a href='<%=response.encodeURL("/jsp/index.jsp") %>' >主页</a>
2、 form
<form action='/jsp/index.jsp;jsessionid=<%=session.getId() %>' method="post">
<input type="submit" value="提交"/>
</form>
或者
<form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
<input type="submit" value="提交"/>
</form>
使用response.encodeURL()更加“智能”,它会判断客户端浏览器是否禁用了Cookie,如果禁用了,那么这个方法在URL后面追加jsessionid,否则不会追加
2.3、 session的有效时长
服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。具体根据服务器设置,一般在二三十分钟左右