【计算机网络】——Cookie和Session

由于HTTP协议是无状态的,即服务器不可能知道我们在上一次HTTP请求中通过了验证。所以要么以后每次请求中都带上用户名和密码,但是这样客户端和服务端都受不了频繁的请求,所以第二种方式就是会话管理。

Cookie

HTTP1.1引入了cookie来保存状态信息。
Cookie是服务器发送到用户浏览器并保存到本地的一小块数据,它会在浏览器之后向同一服务器发起请求时被携带上,用于告知服务端两个请求是否来自于同一个服务器。由于每次都需要携带cookie数据,因此会带来额外的性能开销,尤其在移动环境下。
cookie曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法而作为唯一的存储手段。但是现在浏览器支持各种各样的存储方式,cookie渐渐被淘汰。新的浏览器API已经允许开发者将数据存储到本地,如使用web storage API(本地存储和会话存储)或indexedDB 。
cookie的分类:
会话期cookie: 浏览器关闭后被自动删除,也就是说仅在会话期有效。
持久性cookie: 指定一个特定的过期时间(expires)或者有效期(max-age)之后就成为了持久性的
通过Document.cookie 属性可创建新的Cookie,也可通过该属性访问非HttpOnly标记的Cookie
secure和only属性
secure:标记为secure的cookie只能通过被https协议加密过的请求发送给服务端。但即便设置了secure标记,敏感信息也不该通过cookie传输,因为Cookie有其固有的不安全性,secure标记也无法提供确实的安全保障。
only:标记为http only的cookie不能为js脚本所调用。跨站脚本攻击(XSS)经常使用JS的Document.cookie API来窃取用户的Cookie信息,因此一定程度避免XSS攻击。
跨站脚本攻击(XSS):通过存在安全漏洞的WEB网站注册用户浏览器内运行非法的HTML/JAVASCRIPT进行攻击
解决:不信任任何客户端提交的数据——将重要的cookie标记为http only ; 表单数据规定值的类型;过滤JavaScript的事件标签

Session

session是在服务端存储的一个特殊的数据结构,用来跟踪用户的状态,可以保存在集群,数据库,文件中;
session维护用户登陆的过程:
1、用户进行登录时,用户提交包含用户名和密码的表单,放入HTTP请求报文中;
2、服务器验证该用户名和密码;(如果正确把该用户信息存储到redis中,它在redis中的key称SessionID)
3、服务器返回的响应报文的Set-cookie首部字段包含了这个SessionID,客户端收到响应报文之后将该报文存入浏览器中。
4、客户端之后对同一个服务器进行请求时会包含该Cookie值,服务器收到后会取出SessionID,从redis中取出用户信息,执行业务操作。
需要注意SessionID的安全问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的SessionID。此外,还需要经常重新生成SessionID。在对安全性要求极高的场景下,如支付操作,除了使用SessionID管理用户状态之外,还需要对用户进行重新验证。如验证码等形式。
在这里插入图片描述
Session和Cookie:
1、Cookie只能存储ASCII码字符串,为Session可以存取任何类型的数据,因此再考虑数据复杂性时首选Session;
2、Cookie存储在浏览器中,容易被查看。如果非要将一些隐私数据存在cookie中,可以将Cookie值进行加密,然后在服务器进行解密。
3、对于大型网站,如果用户所有信息都存储在Session中,那么开销是非常大的,因此不建议将所有用户的信息存储到Session中。
4、对于较为机密的数据应用session,频繁操作的要用cookie

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值