Session的作用是维持一个会话的连接。每一个session有一个sessionID。
浏览器第一次发送请求给服务器,服务器查找请求中的Cookie有没有JsessionID,如果有则根据ID找到session,就将请求与之前的会话联系起来了,
否则,服务器新建一个session,将sessionid通过cookie传给客户端,这样,每次客户端都会传回这个cookie,服务端就能找到jsessionID,联系会话。
由于cookie可能会被禁用,可以使用以下的方式
1,URL重写
在网址后面增加参数,作为传递的依据. 格式是: 地址?k=v&k=V
2,使用隐藏的表单来传递数据 type='hidden'即可
3,上面的两种方法适合于不需要跨越很多页面的情况。使用cookie解决这些问题。
不能直接删除一个cookies,要想删除只能新创建一个同名 的cookie,然后设置maxAge=0;
Cookie cookie=new Cookie("K","V"); cookie.setMaxAge(0); response.addCookie(cookie);
4,HTTPSession
HttpSession中的值是保存在内存中的,可以把任意的java类型的数据写入HttpSession中。
与Cookie不一样,HttpSession的值不会发送给客户端,而是保存在服务器内存。Servlet容器为每一个HttpSession创建一个唯一的标识符——jsessionid,标识符传递到客户端,客户端之后只需要把标识符发回来就可以了。一般通过Cookie或者将jsessionid作为参数放在URL的后面。
HttpSession session=req.getSession(); if(session.isNew()){ System.out.println("新的Session"); session.setAttribute("Time",System.currentTimeMillis()); } System.out.println(session.getAttribute("Time")); System.out.println(session.getId()); //用户最后一次离开之后,这个Session还能存活10s,10s之后服务器就把那个用户给忘记了。 //值设为0,session就永远有效 session.setMaxInactiveInterval(10);
//使得这个Session强制过期
session.invalidate();