Cookie和Session

Cookie:

(小饼干,HTTP定义的一种由客户端(浏览器)保存临时数据的形式)

(小饼干处理内容的过程有两种,一种是后台(JAVA),一种是前端(JS))

Cookie保存内容的形式是K-V对,一般是用K=V,K=V形式来保存内容的。

每次浏览器发出请求的时候,都会将自己的Cookie发送给后台,有多少,发多少。

后台如果想要设置让前端保存什么内容的话,会通过Set-Cookie头来通知前端保存内容

cookie.setDomain("qq.com"); //设置域名
cookie.setPath("/web/index");  //设置路径
cookie.setMaxAge(3600*24*7);  //设置最大存在时间,单位秒

resp.sendRedirect("success.html");  //跳转

CSRF攻击:错误的使用Cookie,过分依赖Cookie.

HTTP是一种无状态的协议,即HTTP是不能记录用户状态的

什么是无状态:同一个浏览器第一次和第二次发出的请求,服务器是没有办法分辨的。但是我们知道HTTP是基于TCP实现的,TCP是有状态的,比如:连接建立以后,这个连接就是一种状态,如果登陆成功了,也就是这个连接都登陆成功了。

为什么HTTP是一种无状态的协议:因为HTTP是短连接,HTTP基于TCP实现不假,但是HTTP的玩法是连接,数据传输,断开,这个时候,TCP已经断了,所以下一次HTTP是一个新的TCP请求,所以我们说HTTP是无状态的。

但是有时候确实需要HTTP协议在前端记录一些内容,来模拟HTTP的状态,这个时候我们就可以使用一种叫做Cookie的东西来实现这个过程

但是,Cookie这种保存在前端的内容对于后台来说其实是不可信的。因为Cookie的值很容易被改变,如果我们将一些很敏感的、很重要的信息保存在Cookie中,就会对后台产生很大的影响

所以一般情况下Cookie中记录的值,都是一些无关紧要的或者不易被修改的值

为了解决HTTP的无状态特性,我们引入了Cookie

为了解决Cookie的不可信问题,我们引入Session(会话)

Session一般来说是基于Cookie来做的,特殊情况下,我们会加入四种Session的追踪方式

Cookie的缺点是写在了前端。前端里面保存的KV对是不可信的。

如果我们把内容保存在后台,前端就无法修改这些信息

Session就是保存在后台的一种KV对的存储结构,但是其保存过程又要和前端保持一致。所以我们设计Session的时候,将其保存的内容格式设计成<Y,<K.V>>

最外层的Y是一个ID值,他将被写在Cookie中发给前端,是一个32位16进制数字(200年不重复);这个Y对应了另一个MAP结构,这个Map里面保存着持有Y的ID的前端所记录的所有状态

HttpSession session=req.getSession();session.setAttribute("username",user);  //设置session值
HttpSession session=req.getSession();
User user = (User) session.getAttribute("username");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值