web基础java基础

Cookie和Session

2017-10-09  本文已影响0人  java面试收割机

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便失效。具体根据服务器设置,一般在二三十分钟左右

上一篇下一篇

猜你喜欢

热点阅读