浅谈Session

一. Session技术

Cookie的局限性:
        1. 限制数据类型
        2. 不能保存中文
        3. Cookie容量比较小,只有4KB
        
    如果要保存4KB以上数据,或者要保存中文的数据,就不能使用Cookie技术,只能使用Session
    
    如果浏览器没有打开Cookie功能 Session就没有用!!!
    
    Session 的特点:
        会话数据保存在服务器上。(保存在服务器的内存中) temp文件
    
核心技术
    HttpSession类型: 是服务器用于保存会话数据的方式
        获取Session对象:
            HttpSession getSession();
            HttpSession getSeesion(boolean create);
        
        设置Session对象:
            void setMaxInactiveInterval(int interval); // 设置Session的有效时间
            void invalidate(); //销毁Session
            String getId();    //返回Session的ID号
           
        保存会话数据到Session对象中:
            void setAttribute(String name, Object obj); //设置Session保存会话数据,可以是一个Object对象
            Object getAttribute(String name); //更加Session的ID获取数据
            void removeAttribute(String name); //清除Session数据
Session的原理:
    功能是让服务器更快的识别不同的访问者
    
    前提:
        在哪一个Session【域对象】中保存的数据,就必须从哪一个Session【域对象】拿出数据
        
    
    服务器:Server1  浏览器:Browser1
    
    
    Browser1:保存了一个Server1给他分配的唯一的标识号,用cookie来保存
        服务器会创建一个Session 
            HttpSession session = request.getSession(); //保存浏览器Cookie信息中带有是SessionID,创建对应的
                                                        //Session对象
    
    Browser1新窗口: 因为是同一个浏览器,所以这里也会带有之前服务器给分配的SessionID信息
        服务器或根据浏览器的信息得到对应的Session
            HttpSession session = request.getSession();
            
    
    解读一下:HttpSession session = request.getSession();
    1)如果是浏览器第一次访问服务器,就会创建一个新的Session对象,用来保存和这个浏览器的会话数据
    并且生成一个唯一的sessionID,叫做 JSESSIONID
    2)会被JSESSIONID作为Cookie的值发送给浏览器,保存
        Cookie cookie = new Cookie("JSESSIONID", sessionID);
        response.addCookie(cookie);
    3)如果是第二次访问,浏览器是带有Cookie信息,在Cookie信息中有一个Cookie 叫做 JSESSIONID
    这个JSESSIONID就会发送给服务器
    4)服务器如果接受到了JSESSIONID信息,就会通过HttpSession session = request.getSession();得到
    对应的Session对象,进行浏览器和服务器直接的会话数据传递和控制
    
    
    【注意】
        在Tomcat服务器中,Session 的名字是JSESSIONID,给浏览器保存的Cookie信息中,只有
        Cookie名字是JSESSIONID的这个Cookie里面保存的才是服务器任务的SessionID
        
        不同的服务器判断是否是一个SessionID内容的方式不一样,
        在PHP中,浏览器Cookie名字为PHPSESSID这是Apache服务器认为的SessionID

你可能感兴趣的:(浅谈Session)