Cookie丶Session

版权声明:如需转载或引用请声明原文网址 https://blog.csdn.net/u013087359/article/details/81905623

1.1 概述

  • 服务器将某些数据发送到浏览器,然后再把数据临时存到用户电脑上
  • Cookie主要用于存储用户信息、用户习惯、用户操作等数据

1.2 作用

  • 用户可以实现自动登录,可以记住登录的用户名和密码,方便下次简化登录
  • 电子商务网站(购物),可以记录你曾经选择的商品,在结账时可以将选择商品调出来,然后付账
  • 可以记录用户的访问习惯、网页停留的时间、喜欢什么样的商品、进行什么搜索,也是网络营销手段

1.3 工作原理

  • 服务器把某些数据存放到响应头中的Cookie中
  • 浏览器根据Cookie信息把数据临时存放到本地中
  • 客户端发送请求时浏览器会把本地有效的Cookie数据发送给服务器
  • 服务器获取Cookie信息

1.4 缺点

  • 因为cookie保存在浏览器上,所以安全性低
  • 可控性比较差,只能存放字符串,不能存放数组和对象
  • 因为数据存放在头信息中,所以增加请求数据的负载
  • 大多数的浏览器对cookie有4K的限制
  • Cookie可以被浏览器阻止

1.5 注意

  • 不同浏览器的Cookie是不相通的

1.6 添加Cookie

    //创建Cookie对象并设置存储的数据
    Cookie cookie=new Cookie("name","zhangsan");    

    //把cookie响应到浏览器中
    response.addCookie(cookie);

1.7 设置Cookie存储的有效时间

  • 默认Cookie是存储在浏览器内存中,浏览器关闭后该Cookie也会失效
  • 使用setMaxAge() 可以设置过期时间,单位:秒,Cookie会写入到客户端的文件中,Cookie过期跟浏览器是否关闭没有关系
    //设置过期时间是在当前时间的2分钟后
    cookie.setMaxAge(60*2);

1.8 设置目录有效性

  • setPath() 设置只有访问指定目录下的文件,请求时才会携带该Cookie、
  • 默认设置的目录是跟添加Cookie的文件同一个目录
    //1.默认设置的是跟当前文件同一个目录,假如url地址是http://localhost:6060/Web04/Servlet/CookieServlet,那么等同cookie.setPath("/Web04/Servlet");

    //2.网站Web04所有资源都能访问该Cookie,如果默认的首页index.html和当前的CookieServlet
    cookie.setPath("/Web04");

    //3.服务器上所有的网站所有的文件都能访问
    cookie.setPath("/");

1.9 移除Cookie

  • 同名同目录有效性时间为0的Cookie进行覆盖就达到删除Cookie效果
    //同名同目录有效性时间为0的Cookie进行覆盖就达到删除Cookie效果
    //1.同名,值没限制
    Cookie cookie=new Cookie("name",null);
    //2.有效时间为0
    cookie.setMaxAge(0);
    //3.跟原Cookie设置的目录要一致
    cookie.setPath("/");

1.10 获取Cookie

    //需要查找Cookie的键名
    String key="name";              
    String value = "";

    //获取请求发送过来的所有Cookie
    Cookie[] cookies = request.getCookies();
    //遍历Cookie
    for (Cookie cookie : cookies) {
        //根据Cookie的键名对比查找相应的Cookie
        if (cookie.getName().equals(key)) {
            //获取当前Cookie的值
            value = cookie.getValue();
            break;
        }
    }
    System.out.println(value);

2. Session

2.1 概述

  • Session是一种会话技术;
  • Session数据存在服务器端,相对于比较安全;
  • Session是基于COOKIE的,如果COOKIE被禁用SESSION功能也会被影响
  • Session可以存储多个类型的数据;
  • Session文件没有大小限制;
  • sessionid默认是整个网站都能访问(即使没有设置cookie.setPath()),所以session存储的数据跨request都有效

2.2 工作原理

  • 把数据存放在服务器中,并把一个Session放到响应头Cookie中
  • 浏览器把sessionid保存到本地中
  • 客户端发送请求时浏览器会把本地有效的cookie中的sessionid发送给服务器
  • 服务器根据sessionid查找存储的数据

2.3 注意

sessionid没有发送到服务器端或者服务器端存储的session被销毁都会导致session数据丢失,调用request.getSession()会重新创建一个session

2.4 获取session和sessionid

    //获取Session
    //该方法会根据客户端传递过来的JSESSIONID在服务器的Session文件中查找是否存在对应的数据
    //如果存在,则返回该Session,如果不存在则创建一个新的Session
    HttpSession session=request.getSession();

    //获取JSESSIONID的值
    //1.使用request对象获取,如果第一次访问没有携带sessionid会返回null
    String sessionId1=request.getRequestedSessionId();
    //2.使用session对象获取       
    String sessionId2=session.getId();
    //3.使用cookie键为JSESSIONID查找其值

2.5 域对象

  • session域存储的数据在session失效前可以被整个网站应用任何动态资源访问(跨请求丶跨资源)
//存储数据到session域中
session.setAttribute("name", "zhangsan");

//获取session存储数据强转前要判断数据是否为null,因为session可能会过期
Object obj=session.getAttribute("name");
String name=obj==null?null:(String)obj;

//移除session中的数据
session.removeAttribute("name");

2.6 sessionid存储在客户端的有效时间

  • sessionid是存储在Cookie中的,所以也是默认关闭浏览器sessionid的Cookie会失效
  • 通过设置JSESSIONID的Cookie的有效时间来把JSESSIONID存在到客户端的本地文件中
    HttpSession session=request.getSession();   
    //同名同值的sessionid的cookie
    Cookie cookie=new Cookie("JSESSIONID",session.getId());
    //设置sessionid的cookie有效存储6小时
    cookie.setMaxAge(60*60*6);

    //响应到客户端覆盖掉原先的sessionid的cookie
    response.addCookie(cookie);

2.7 服务器端session定时销毁

  • 默认连续30分钟该客户端没有发送请求到服务器端(不要求一定要调用session),则该session就会自动被销毁
  • 可以在web.xml设置销毁session的连续空闲时间间隔
<web-app>
  <session-config>
     <!-- 设置销毁session的连续空闲时间间隔,单位是分钟 -->
    <session-timeout>10</session-timeout>
  </session-config>
 </web-app>

2.8 手动销毁存储在服务器端的session

//销毁session
session.invalidate();

猜你喜欢

转载自blog.csdn.net/u013087359/article/details/81905623
今日推荐