Java篇-Session与Cookie

作者: TianTianBaby223 | 来源:发表于2018-09-25 13:37 被阅读3次

一 : 会话技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话,会话技术就是记录这次会话中客户端的状态与数据的.会话技术是帮助服务器记住客户端状态的.

二 : Cookie

Cookie 是将用户的数据存储到客户端的技术.

  • 服务器端将Cookie发送到客户端 :

cookie.setPath(" ") 如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //创建COOKIE对象
        Cookie cookie = new Cookie("name", "jingjing");
        //为cookie设置持久化时间,cookie信息在硬盘上存的时间
        cookie.setMaxAge(60*10);
        //为cookie设置携带的路径
//      cookie.setPath("/WEBpro/sendcook");//访问sendcookie资源时携带这个cookie
        
        //访问WEBpro下任何资源的时候都携带这个cookie
        cookie.setPath("/WEBpro");
        
        //访问服务器下的所有资源都携带这个cookie
//      cookie.setPath("/");
        
        //将cookie中有存储的信息发送到客户端
        response.addCookie(cookie);
    }
  • 服务器端接受客户端携带的Cookie :
    显示最后一次访问时间demo
//获得当前时间
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
        String time = format.format(date);
        
        //创建cookie记录当前最新访问时间
        Cookie cookie = new Cookie("accessTime", time);
        cookie.setMaxAge(60*10);
        response.addCookie(cookie);
        
        //获得客户携带的cookie
        String lastTime = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cook : cookies) {
                if (cook.getName().equals("accessTime")) {
                    lastTime = cook.getValue();
                }
            }
        }
        //设置显示中文
        response.setContentType("text/html;charset=UTF-8");
        if (lastTime == null) {
            response.getWriter().write("您是第一次访问,祝愉快");
        }else {
            response.getWriter().write("上次的访问时间是 : " + lastTime);
        }
    }
  • 删除客户端的cookie
    删除客户端存储的cookie信息,使用同名同路径的持久化时间为0的cookie进行覆盖.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //删除客户端name:"..."的cookie信息
        Cookie cooie = new Cookie("name", "");
        //将path设置与要删除的cookie path一致
        cooie.setPath("/WEBpro");
        //设置时间是0
        cooie.setMaxAge(0);
        response.addCookie(cooie);
    }

三 : Session技术

Session技术是将数据存储在服务器端的技术,会为每一个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间. Session的实现是基于Cookie,Session需要借助Cookie存储客户端唯一标识JESSIONID

  • 获取Session对象
//创建属于该客户端(会话)私有的session区域
        /*
         * 内部判断该客户端是否在服务器已经存在session,如果客户端在服务器不存在session,那么创建一个
         * 新的session对象
         * 如果该客户端在服务器已经存在session,获得已经存在的session返回.
         * */
        HttpSession session = request.getSession();
        String id = session.getId();

当浏览器关闭,Session并没有销毁,而是Cookie中保存的JESSIONID没有了,没有了这把钥匙,就无法在服务器中寻找对应的Session空间

  • 手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
HttpSession session = request.getSession();
        String id = session.getId();
        
        //回写前手动创建一个JSESSIONID的cookie,为该cookie设置持久时间
        Cookie cookie = new Cookie("JSESSIONID", id);
        cookie.setPath("/WEBpro/");
        cookie.setMaxAge(10*60);
        response.addCookie(cookie);
        session.setAttribute("name", "hello");
        response.getWriter().write(id);
  • Session域对象

Session 是一个域对象
有如下方法

session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
    //从session中获得存储数据
        HttpSession session = request.getSession();
        String name = (String)session.getAttribute("name");
        response.getWriter().write(name);

四 : Session对象的生命周期

创建 :
第一次request.getSession()
销毁 :
① : 服务器关闭时(非正常)
② : session过期/失效(默认30分钟)
可以在web.xml中配置
超时时间是从不操作服务器端的资源开始计时.

<session-config>
       <session-timeout>30</session-timeout>
</session-config>

③ : 手动销毁session

session.invalidate();

五 : session原理

每一个客户端(用户)对应服务器端一块内存区域.通过客户端存的编号(JSESSIONID)找寻相应的内存空间,如果找不到则创建新的.Cookie属于会话级别的,当一次会话结束时,cookie即可消失,所以想要保存cookie就要设置cookie的存活时间,而Session在服务器中存储,客户端关闭,并不会让Session消失.依然保存在服务端.

原理

相关文章

网友评论

    本文标题:Java篇-Session与Cookie

    本文链接:https://www.haomeiwen.com/subject/pjwgnftx.html