ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cookie & Session

2022-07-20 23:03:25  阅读:145  来源: 互联网

标签:浏览器 Session 会话 session Cookie cookie


会话跟踪技术

  • 会话:用户打开浏览器,访问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占用服务器资源
 

标签:浏览器,Session,会话,session,Cookie,cookie
来源: https://www.cnblogs.com/yzlworld/p/16500201.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有