Cookie和Session学习

12 篇文章 0 订阅
6 篇文章 0 订阅

Cookie和Session学习

什么是会话?

​ HTTP 是无状态的,全部的请求都是无状态的。然而,某些情况下我们想让我们的状态能被记住。比如,浏览一个网站,当我们浏览它的不同页面时,是不希望每次都弹出一个登录页面,我们是希望我们的购买状态是能够被记住的!

为了克服 HTTP 请求无状态的性质,我们可以使用会话Session),常用的会话跟踪技术是Cookie与Session 。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

什么是Cookie?

​ 类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

cookie的工作原理:

  1. 客户端(浏览器)请求服务器,服务器需要记录该用户状态,就使用resp向客户端(浏览器)发一个Cookie。客户端(浏览器)会把Cookie保存起来到本机磁盘存储。
  2. 浏览器再请求该网站时,浏览器会把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

举例来说

​ 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存) 。

cookie需要掌握的常用方法:

//服务端从客户端获取cookie请求
Cookie[] cookies = req.getCookies();//返回一个数组,证明可能会有多个cookie
//获取cookie的key(名字)
cookie.getName();
//获取cookie的value(值)
cookie.getValue();
//新建一个cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");//(System.currentTimeMillis() + "")作用为转类型为String类型
//设置cookie有效期为一天
cookie.setMaxAge(24*60*60);
//响应给客户端一个cookie
resp.addCookie(cookie);

什么是Session(重点)?

​ Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。 每个用户(浏览器)访问服务器都会建立一个session对象,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

session工作原理:

  1. 客户端(浏览器)访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
  2. 客户端浏览器再次访问时,服务器只需要从该Session中查找该客户的状态就可以了。

session需要掌握的常用方法:

//得到session
HttpSession session = req.getSession();
//往session中存东西(可以存一个对象)
session.setAttribute("name","会话");
//取session里面的对象
String name = (String)session.getAttribute("name");
//获取session中的ID
String sessionId = session.getId();
//移除session里面的键值
session.removeAttribute("name");
//手动注销session
session.invalidate();

//创建session原生就是做了下面内容
Cookie cookie = new Cookie("JSESSIONID",sessionId);
resp.addCookie(cookie);

Cookie和Session的区别?

简易原理图像区别

  • cookie

image-20220509001543902

  • session

image-20220509002345090

  1. **数据存储位置:**cookie数据由服务端生成发送存放在客户的浏览器上,session数据放在服务器上。
  2. **安全性:**cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
  3. **服务器性能:**session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  4. **数据存放大小:**数据格式是键值对,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  5. **有效期长短:**Cookie适用于设置长有效期,保存在本机磁盘上,而session适用于设置短有效期,保存在服务器上。
  6. **跨域支持上的不同:**Cookie支持跨域名访问,而Session则不会支持跨域名访问,Session仅在他所在的域名内有效。
  7. **建议:**重要信息存放为session,其他信息如果需要保留,可以放在cookie中。Cookie与Session的搭配运用在实践项目中会完成很多意想不到的效果。

学习路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值