JavaWeb会话技术Cookie和Session

会话技术

1概念:一次会话中包含多次请求和响应;

浏览器第一次给服务器资源发送请求;关闭就

一次会话:

2功能:

​ 共享数据,

3方式:

  • 客户端会话技术:Cookie,存在客服端
  • 服务器:Session

一:Cookie

    1. 概念:客户端会话技术:将数据保存到客户端

    2. 快速入门:

      1. 响应头里面设置。

      2. Demo01.java

      3.  Cookie cookie = new Cookie("msg", "hello");
         response.addCookie(cookie);
        

      在请求头里面获取设置的内容;

      第二个Demo02.java

      Cookie[] cookies = request.getCookies();
      if(cookies!=null){
          for (Cookie cookies1:cookies
               ) {
              String name = cookies1.getName();
              String value = cookies1.getValue();
              System.out.println(name + value);
      
          }
      }
      
  1. 实现原理

    1. 客户端—服务器端的第2条线:响应和第三条线:请求线上上分别有数据cookie的set和传递
    2. 基于2响应头set-cookle和3请求头cookie实现
  2. 细节:

    1. 可以创建多个Cookie对象,使用response调用多次addCooke();
    2. 保存多久?
      1. 默认保存在浏览器,当浏览器关闭后。Cookoie数据销毁

      2. 持久化存储:

        1. setMaxAge(int seconds)

        2.  Cookie cookie = new Cookie("msg", "hello");
           
           cookie.setMaxAge(30);
           response.addCookie(cookie);
          
        3. 正数:将Cookie数据写道硬盘的文件中,持久化存储。seconds存活时间

        4. 负值:就上面的1,关闭浏览器的时候就会销毁;默认值

        5. 0:删除Cookie数据;

    3. Cookie能不能存储中文?
      1. 在tomcat8以前不能存储支持中文数据;

      2. 对于特殊字符空格还是不行;可以编码后传给Cookie,展示在也页面的时候,再解码;

      3. 使用编码和解码的静态方法:

        1.  Date date = new Date();
           String str = "sss s";
           //编码
           String encode = URLEncoder.encode(str, "utf-8");
           
           //解码
           String decode = URLDecoder.decode(encode, "utf-8");
          
    4. Cookie的获取范围,共享有多大?
      1. 一个tomacat服务器中,部署多个项目,在这些项目中多个Cookie能否共享?

        1. 默认不行;
        2. 如果要共享:可以设置 setPath(String path),其中path位“/”
        3. cookie.setPath("/");
      2. 不同的tomacat服务Cookie共享问题?

        1. setDomian(String path):如果设置一级的域名相同,那么多个服务器之间的cookie可以共享;
  • 4cook的特点

    1. 存在客户端浏览器
    2. 对于大小有限制4kb,以及同一个域名下的总cookie的数量有限制20个,
    3. 作用:使用场景:
      1. cookie一般用于存少量不太敏感的数据;
      2. 在不登录的前提下,完成服务器堆客户端的身份识别

5注意事项:

即使设置一个cookie,在request.getCookies().生成的数组,是两个,还有一个默认的;

​ 尤其在设置全局变量的flag值的时候,要注意;

二:Session

1HTTPSession;服务器端会话技术;

2快速入门:

获取HttpSession对象:

//:demo01
HttpSession session = request.getSession();
session.setAttribute("msg","hello");

使用Httpsession对象:

//:demo02
HttpSession session = request.getSession();
session.getAttribute("msg");

原理:

1:Session的依赖于cookie的;当;两者都没有的时候,服务器创建一个Session对象,会在第一场的响应头创建一个对象的记录id,(JGSSionID);然后在第二场的请求头去访问服务器的时候,会带着这个id去查看这个Session;这样也保证了服务器两次getSession是同一个值;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZ1GDniK-1623413918033)(C:\Users\12479\AppData\Roaming\Typora\typora-user-images\image-20210610164918383.png)]

2:细节:

  1. Session获取的是一个值,不是数组,为空时返回的是null.

  2. 当客户端关闭.服务器不关闭,两次获取的Session是同一个值么?

    1. 默认不是;
    2. 可以用(1)设置cookie来解决,(2)并且设定setMaxAge()长一些(因为默认为关闭浏览器也就是客服端,就管删除cookie);
  3. 客户端不关闭,服务器关闭,相同么?

    1. 不同;(直接输出session.GetId(),是一个JSESSIONId);也就是hashcode的值不同)
    2. 不是同一个,但是要确保数据不丢失:
      1. Session的钝化;
        1. tomcat做了已经;idea可以完成钝化(生成work);完成不了活化(work目录在启动的时候会删除,重新生成一个);
        2. 在服务器正常关闭之前.将session对象序列化到硬盘保存
      2. Session的活化;
        1. 在服务器启动后;将session文件转化为内存中的session对象即可;
  4. session什么时候被销毁?

    1. 服务器关闭
    2. Session对象调用invalidate();
    3. timeout默认时间30minutes;在Web.xml文件中,有个文件;
  5. session的特点

    1. session用于存储一次会话的多次请求数据,存在服务器端,比request.getServletContext().setAttribute();范围小,经常用session共享一次会话;
    2. session可以存储任意类型,Obiect;
  6. Session和cookie的区别:
    • cookie,在客户端,
    • session没有数据大小限制;cookie有大小区别,比较小的数据限制
    • Session相对数据安全

request.getServletContext().setAttribute();范围小,经常用session共享一次会话;
2. session可以存储任意类型,Obiect;

  1. Session和cookie的区别:
    • cookie,在客户端,
    • session没有数据大小限制;cookie有大小区别,比较小的数据限制
    • Session相对数据安全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值