会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例( 四 )

2.3 Cookie的原理分析

  • Cookie的实现原理是基于HTTP协议的,其中涉及到HTTP协议中的两个请求头信息:
    • 响应头:set-cookie,为浏览器设置Cookie,携带在响应数据中
    • 请求头: cookie,告诉服务器现有的Cookie,携带在请求数据中,键值对,以分号分隔
2.4 Cookie的使用细节2.4.1 Cookie的存活时间
  • 默认:存储在浏览器内存
    • 浏览器关闭时,内存释放,将被销毁
  • setMaxAge(int seconds):设置Cookie存活时间
    • 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时间自动删除
    • 负数(默认):将Cookie存储到浏览器内存,浏览器关闭时销毁
    • 零:删除对应Cookie
2.4.2 Cookie存储中文笔者使用tomcat 8.5.76,其Cookie已支持中文
  • 若字符集不匹配,则浏览器报错500并给出相应提示
  • 如果需要存储中文,邪恶需要使用URL编码进行转码
    • 对将要存储的Cookie值进行编码
      // import java.net.URLEncoder;String value = "中文值";value = URLEncoder.encode(value, "UTF-8");Cookie cookie = new Cookie("name",value);
    • 对浏览器的请求中的Cookie值进行解码
      // import java.net.URLDecoder;String value = URLDecoder.decode(value, "UTF-8");
3、 Session3.1 Session的基本使用
  • 概念:服务端会话跟踪技术——将数据保存到服务端 。
    • Session是存储在服务端而Cookie是存储在客户端
    • 存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
    • 存储在服务端的数据相比于客户端来说就更安全
  • 工作流程
    • 在服务端的AServlet获取一个Session对象,把数据存入其中
    • 在服务端的BServlet获取到相同的Session对象,从中取出数据
    • 通过上述两步就可以实现一次会话中多次请求之间的数据共享
3.2 Session的基本使用在JavaEE中提供了HttpSession接口,来实现一次会话的多次请求之间数据共享功能
  • 获取Session对象
    HttpSession session = request.getSession();
  • Session功能对象
    // 存储数据到 session 域中void setAttribute(String name, Object o);// 根据 key,获取值Object getAttribute(String name);// 根据 key,删除该键值对void removeAttribute(String name);
  • 案例
    • 向Session中写入数据
3.2 Session的原理分析Session是基于Cookie的