Session管理

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();

  

原文地址:https://www.cnblogs.com/Coder-Pig/p/6890152.html