会话技术:
cookie技术:存到客户端
发送cookie:
Cookie cookie=new Cookie(name,value);
cookie.setMaxAge(秒数);
cookie.setPath();
response.addCookie(cookie);
获得Cookie:
Cookie[] cookies=request.getCookies();
cookie.getName();
cookie.getValue();
Session技术:存到服务器端,借助cookie存储JSESSIONID
HttpSession session=request.getSession();
setAttribute(name,value);
getAttribute(name);
Session生命周期
创建:第一次指定request.getSession();
销毁:服务器关闭、session失效/过期、手动session.invalidate();
cookie技术:存到客户端
发送cookie:
Cookie cookie=new Cookie(name,value);
cookie.setMaxAge(秒数);
cookie.setPath();
response.addCookie(cookie);
获得Cookie:
Cookie[] cookies=request.getCookies();
cookie.getName();
cookie.getValue();
Session技术:存到服务器端,借助cookie存储JSESSIONID
HttpSession session=request.getSession();
setAttribute(name,value);
getAttribute(name);
Session生命周期
创建:第一次指定request.getSession();
销毁:服务器关闭、session失效/过期、手动session.invalidate();
session作用范围:默认一会话中
session技术概述:当浏览器访问的资源会在服务器端执行getSession()语句时,例如我们自己写的SessionServlet或者任何.jsp文件(因为.jsp文件被翻译后的.java文件中含有session = pageContext.getSession();语句),都会自动在响应头中(response)中添加Set-Cookie: JSESSIONID=E7FEAA0A85A984A8E28CCB04C31A70E2; Path=/WEB16; HttpOnly 语句,用来给之后访问同一web下的所有资源时,都带有JSESSIONID。
JSESSIONID是用来访问session域的,那么session域在服务器端默认存活时间是多久呢?
30分钟(从不操作服务器端的资源开始计时)!这个默认时间也可以从web.xml中修改<session-config><session-timeout>30</session-timeout></session-config> 来设定成想要的默认值。或者不使用默认值来使用session.setMaxInactiveInterval(间隔)更改或者说是设定session在服务器端的存活时间。
那么另一方面,JSESSIONID的存活时间是多少呢
从上面Set-Cookie中的内容可知,自动化的set-cookie并没有设置cookie持久化时间,只是设置了cookie的的携带路径,故JSESSIONID的存活时间就是默认时间,即到从打开会话到浏览器关闭为止。要想更改这一时间可以自行设定Cookie cookie=new Cookie("JSESSIONID",session.getId());cookie.setMaxAge(300);response.addCookie(cookie);但这样并不会覆盖自动的Set-Cookie所以在响应头中会看到两条JSESSIONID,打开同一web资源下其他页面请求头中也会带有两条相同的JSESSIONID信息,但在浏览器关闭后再重新打开去访问同一web工程下的资源就会发现cookie中就只含有我们自己手动设定的JSESSIONID信息了。