Cookie和Session

文章目录

  • 一、Cookie
  • 二、Session


一、Cookie

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

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

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

二、Session

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

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

关于未登录不允许访问的敏感资源:
在某次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

你可能感兴趣的:(web,服务器,前端,java)