Cookie / Session / URL重写
Cookie
//创建一个Cookie对象 Cookie cookie = new Cookie("username","JACK"); //在客户端存储的时间(生命周期)单位是秒 7天 7*24*60*60 //如果这里设置为0 就表示客户端不保存该cookie 即临时cookie //如果设置为-1 就表示客户端关闭之后就删除该cookie 也可以称之为临时cookie cookie.setMaxAge(-1); //设置cookie在客户端存放的路径 如果不设置,默认在本项目名称目录下 cookie.setPath("/"); //将创建完好的cookie存放在response相应对象中 response.addCookie(cookie);
如果浏览器端拒绝存储cookie信息,就会导致JSESSIONID的值不能正常到达客户端,
那么客户端向服务器发送请求时,就无法将JSESSIONID的值带回到服务器中,从而导致找不到自己的会话Session
怎么解决:我们可以使用URL地址重写的办法解决
因为cookie在客户端只允许存储4k的数据,那么实际上cookie存储了3k数据就已经到达了一个极限了,cookie就会显得力不从心了,
所以在B/S交互中就需要一个更大的存储数据对象,这就是session存在的重要起因。
Session会话
当用户通过浏览器访问服务器的应用程序时,程序会为每一个用户创建一个session对象,实际上就是在内存中分配一块内存给该用户使用 该对象可以存储大量的数据; 如果浏览器端禁用了cookie功能,那么服务器端传递给浏览器端的jsessionid就没有办法保存, 这时候当用户再一次向服务器发送请求时,服务器会因为无法找到为用户创建好的session, 就会再次创建一个session对象,这时就需要我们考虑如何为服务器减少创建session对象的次数; 使用response对象的两个方法,保证服务端和浏览器端使用的是用一个jsessionid值。
URL重写
1--servlet中涉及向客户端输出页面元素的时候,可以在相应的请求地址外面包上一层方法, 也就是说使用response.encodeURL(“请求地址”);为请求地址添加一个JSESSIONID的值 2--servlet中涉及跳转到新的页面时,可以使用response.encodeRedirectURL(“请求地址”);为请求地址添加一个JSESSIONID的值 3--在jsp页面中,涉及到的请求地址,可以使用jstl标签中url的value属性进行设置 前提是需要导入两个jar包 jstl-1.2.jar 和 standard-1.1.2.jar <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 如:<a href=<c:url value="encodeURL.action"></c:url>>encodeURL</a> 4--在jsp页面中使用:<a href="<%=response.encodeURL("encodeURL.action")%>">encodeURL</a>