Cookie & Session

2022/7/20 23:23:47

本文主要是介绍Cookie & Session,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

会话跟踪技术

  • 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开链接,会话结束,再一次会话中可以包含多次请求和响应

  • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同意浏览器,一边在同一次会话的多次请求间共享数据

  • Http协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求,因此我们需要会话跟踪技术来实现会话内数据的共享。

  • 实现方式: 1. 客户端会话跟踪技术:Cookie 2. 服务端会话跟踪技术:Session

Cookie的使用

  • 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

  • Cookie基本使用:

    *发送Cookie

    1. 创建Cookie对象,设置数据

    2. 发送Cookie到客户端,使用response

              String s = "张三";
              String value = URLEncoder.encode(s, "UTF-8");
              System.out.println(value);
              //创建cookie
              Cookie cookie = new Cookie("username" ,value);
              //发送cookie到客户端,然后使用response;
              //设置存活时间
              cookie.setMaxAge(60*60*24*7);
      ​
              response.addCookie(cookie);

    *获取Cookie

    1. 获取客户端所有的Cookie,使用request

    2. 遍历数据,获取每一个对象:for

    3. 使用Cookie对象方法获取数据

      //获取客户端所有的Cookie对象
              Cookie[] cookies = request.getCookies();
              //遍历
              for (Cookie c:cookies) {
                  //getName()获取Key的值,getValue()获取value值
                  String name = c.getName();
                  if ("username".equals(name)) {//判断一下是否是我们要的cookie
                      String s = c.getValue();
                      //中文解码
                      String value = URLDecoder.decode(s, "UTF-8");
                      System.out.println(name+","+value);
                      break;
                  }
              }

*Cookie原理

  • Cookie的实现是基于HTTP协议的

    *响应头:set-cookie

    *请求头:cookie

  • Cookie使用细节 (看上面代码)

    • Cookie存活时间

      *默认,存储在浏览器的内存中,当关闭后,内存释放,Cookie被销毁

      *setMaxAge(int seconds):设置Cookie存活时间

        1.    正数:将cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
           2. •    负数:默认值,Cookie在当前浏览器的内存中,浏览器关闭,则会被销毁
           3. •    零:删除对应的Cookie

*存储中文:

1.Cookie不能直接存储中文

2.需要进行URL编码

Session

  • 服务端会话跟踪技术:将数据保存到服务端

  • JaveEE 提供HttpSession接口,实现一次会话的多次请求间数据共享

  • 使用:

    *获取session对象

    *Session对象的功能

    setAttribute()

    getAttribute()

    removerAttribute()

        //创建session对象
        HttpSession session = request.getSession();
        //绑定数据到session域中
        session.setAttribute("username","zs");
​
       //创建session对象
        HttpSession session = request.getSession();
        //获取session域中的数据
        Object username = session.getAttribute("username");
        System.out.println(username);

 

  • Session 原理:是基于Cookie实现的,Session的唯一标识id

    *Tomcat会帮session对象创建id,然后以Cookie的形式发送给浏览器,然会再次发送的时候会携带session的Id,服务器会根据id来共享唯一Session数据。

  • Session的使用细节

    *Session钝化和活化

    1. 服务器重启,Session是否还存在?

      *钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中

      * 活化:再次启动服务器,从文件中加载数据到Session中

  • Session 销毁

    1. 默认情况下,无操作,30分钟自动销毁

      在web.xml 中配置

      <!--session 存活时间-->
          <session-config>
              <session-timeout>30</session-timeout>
          </session-config>
  1. 调用Session对象的invalidate()方法,自己销毁。(例:退出登录需要将Session销毁)

小结

*Cookie 和 Session都是来完成一次会话内多次请求间的数据共享的

*区别:

 1. 存储位置:Cookie数据存储在客户端,Session在服务器端
    2. 安全性:Cookie不安全,Session安全
    3. 数据大小:Cookie最大3KB,Session无大小限制
    4. 存储时间:Cookie可以长期存储,Session默认30分钟,关闭服务器还是存在,但是关闭浏览器后,SessionId就销毁了,再次获取就不是同一个Session对象了。
    5. 服务器性能:Cookie不占服务器资源,Session占用服务器资源


这篇关于Cookie & Session的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程