Cookie和Session


一、Cookie

客户端保存数据的技术,存放在本地硬盘浏览器指定的某个目录

如何设置Cookie:
服务端返回的响应头Set-Cookie:xxx=xxx(Cookie数据格式,也是多组键值对)

如何使用Cookie:
本地保存的Cookie数据,每次请求都携带在请求头Cookie:xxx=xxx(和网站路径:ip或域名绑定)

二、Session

服务端保存会话数据的技术
web服务器启动后,创建了一个Map<String,Session>

这里的Map类似于超市的系统
String是一个随机字符串,类似于会员卡号
Session是某个用户的会话对象
Session类型本身也是一个Map<String,Object>

关于未登录不允许访问的敏感资源:
在某次http请求时,如何校验是否登录?
查看数据结构中是否有Session对象

内部原理:
请求携带Cookie:sessionid=xxx(随机字符串)
获取到xxx,从数据结构查看是否有对应的值
如果查不到,返回null

//获取当次请求的session(此时可能登录,可能没有登录)
//如果获取不到,返回null
HttpSession session = req.getSession(false);
if(session!=null){
    String username = (String) session.getAttribute("u");
    if(username!=null){//且session设置的数据也不为空,说明已登录
    	resp.getWriter().println("用户已登录,允许访问");
    	return;
    }
}

登录操作:
账号密码校验成功,创建一个Session对象到数据结构
从数据结构查(通过请求携带的Cookie中xxx来查Session),如果查不到,就创建一个

HttpSession session = req.getSession(true);
//session对象本身也是一个Map结构,可以保存多组键值对的数据
session.setAttribute("u",username);

getSession的隐藏含义:
返回的响应头,会携带Set-Cookie:sessionid=xxx

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dhdhdhdhg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值