我爱Java系列---【Cookie和Session】

一、四大域对象所对应的的对象

域对象 

                                

存取用法(Servlet存—>jsp取)

request.getRequestDispatcher("/demo06.jsp").forward(request, response);

                                                                                                              

作用范围

ServletContext

包含application和config

getServletContext().setAttribute("name","wangwu");

${applicationScope.name}

整个web项目,多个servlet可以共享数据。
 Session          

request.getSession().setAttribute("name","lisi");

${sessionScope.name}                   

                                                                                

会话一次会话
 Request

request.setAttribute("name","zhangsan");

${requestScope.name}

整个请求链(请求转发也存在)
PageContext

PageContext方法:set()、get()、remove()

pageContext.findAttribute(“key”) 在这四大域对象中依次查找

一个jsp页面 ,一般用来jsp标签的数据传输

注意: 从上往下,作用范围由大到小。

pageContext作用

1.代理其他的三大域对象 pageContext.setAttribute(“key”,”value”,pageContext.SESSION_SCOPE); 存放  在session中代理了session

2.全域查找 pageContext.findAttribute(“key”) 在这四大域对象中依次查找

3.获取其他的jsp八大内置对象

pageContext 中代表域的常量    

  PageContext.APPLICATION_SCOPE    

            PageContext.SESSION_SCOPE    

            PageContext.REQUEST_SCOPE    

            PageContext.PAGE_SCOPE          

  findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null(与el表达式不同,此处返回null,对网页是不友好的)  

 

二、cookie和session  

1.cookie             

概述:

Cookie , 浏览器保存用户数据的技术 .

使用:

创建 ,在 服务器端 new Cookie对象 ,通过响应发送到 浏览器.

         // 创建 Cookie
         Cookie cookie = new Cookie("username", "tom");
         Cookie cookie2 = new Cookie("Time", System.currentTimeMillis()+"");

        Cookie cookie3 = new Cookie("username", "jack");

        // 添加 多个Cookie
         response.addCookie(cookie);
         response.addCookie(cookie2);

        // cookie3 与 cookie  key 重名了
         response.addCookie(cookie3);

// 注意 : 如果key重复, 响应时是多个 , 浏览器的保存最后一个value.

再次请求, 浏览器将 cookie提交服务器

// 获取  cookie数组
Cookie[] cookies = request.getCookies();

System.out.println(cookies);


// 遍历数组
for (Cookie cookie : cookies) {
     System.out.println(cookie);
     // 获取 cookie名字 与 值 
     System.out.println(cookie.getName()+"==" + cookie.getValue());

}

cookie设置

时间 : 默认cookie是关闭浏览器,一次会话结束就消失了 . 通过setMaxAge(second)秒值 ,生命时间

    // 创建
      Cookie c  =   new Cookie("time" , System.currentTimeMillis()+"" );

     // 设置时间
       c.setMaxAge(60); // 60秒 一分钟


       //添加到 response
       response.addCookie(c);

路径 : 默认cookie就是当前web应用 .当前应用中的生成Cookie,在访问应用中其他资源,也会提交 .

setPath(path) 通过设置路径,对cookie进行筛选 .

          // 设置 cookie
         Cookie cookie = new Cookie("password" , "abcdef");
         // 设置 cookie 路径
         cookie.setPath("/web11/aaa");
         response.addCookie(cookie);

// 注意 : 路径写成 绝对路径, /web11  开始

删除Cookie

         // 创建  Cookie
         Cookie username = new Cookie("username", "");

        //1. 设置时间为0
         username.setMaxAge(0);


         //  2.路径一致 ,默认路径可以省略

       
         // 3. 响应携带
         response.addCookie(username);

2.Session

概述 :

Session, 服务器保存用户数据的技术

使用 :

获取session , 依靠request的getSession . Session 对象服务器创建 , 通过 request获取,

当getSession 方法时, 判断请求中,是否有JSESSIONID, 如果没有,必然创建新的session .

如果有JSESSIONID ,通过id查询对应Session ,找到了就返给你, 找不到 创建新的session .

代码演示:

存储数据

       // 获取Session
         HttpSession session = request.getSession();

        // 保存数据
         session.setAttribute("username" , "tom");

获取数据

       // 获取 session
        HttpSession session = request.getSession();

       // 获取  数据 ,通过 key 获取value 
        Object username = session.getAttribute("username");

       System.out.println(username);

session持久化

依靠cookie生命的延长 , 保证 JSESSIONID 存在 ,所以 可以 关闭浏览器,依然访问Session

     

session持久化

        // 1. 获取 session
        HttpSession session = request.getSession();

       // 2. 获取 JSESSIONID
        String id = session.getId();
        System.out.println(id);

       // 3. 把 id 保存 一个 Cookie中  , 键 名称 必须 JSESSIONID
        Cookie c = new Cookie("JSESSIONID", id);

       // 4. 设置时间
       c.setMaxAge(60 * 60 );

       // 5.  response 响应 到浏览器
       response.addCookie(c);

cookie和session区别
 

cookie

session

保存位置

浏览器

服务器

数据类型

String

对象

安全行

不安全

安全

 





 

愿你走出半生,归来仍是少年!
原文地址:https://www.cnblogs.com/hujunwei/p/10951105.html