客户端的两种客户端存储:Cookie和Web Storage

1.Cookie

HTTP 是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即无法实现状态管理,因此即使当该用户下一次继续访问,也无法区分他与其他的用户。于是我们会使用 Cookie 来管理 Session,以弥补 HTTP 协议中不存在的状态管理功能。

客户端的两种客户端存储:Cookie和Web Storage

步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常是以 POST 方法把请求发送给服务器。而这时,会使用 HTTPS 通信来进行 HTML 表单画面的显示和用户输入数据的发送。
步骤 2: 服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与 Session ID 绑定后记录在服务器端。向客户端返回响应时,会在首部字段 Set-Cookie 内写入 Session ID(如 PHPSESSID=028a8c…)。你可以把 Session ID 想象成一种用以区分不同用户的等位号。

然而,如果 Session ID 被第三方盗走,对方就可以伪装成你的身份进行恶意操作了。因此必须防止 Session ID 被盗,或被猜出。为了做到这点,Session ID 应使用难以推测的字符串,且服务器端也需要进行有效期的管理,保证其安全性。另外,为减轻跨站脚本攻击(XSS)造成的损失,建议事先在 Cookie内加上 httponly 属性。
步骤 3: 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证
接收到的Session ID 识别用户和其认证状态。
另外,服务器端应如何保存用户提交的密码等登录信息呢?通常,一种安全的保存方法是,先利用给密码加盐(salt)的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。盐(salt) 其实就是由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了同一个密码时,由于随机生成的 salt 值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

2.Web Storage

Web Storage定义了两个对象:localStorage(永久存储机制) 和 sessionStorage(跨会话的存储机制)。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/httpexp/20249.html

(1)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2023年2月10日
下一篇 2023年2月23日

相关推荐

  • 宝塔面板网站升级了php版本以后502 Bad Gateway错误最佳解决方案

    初期安装的是php7.3版本,用宝塔面板一键部署Wordpress,一次偶然的机会看到php可以升级到7.4版本,那就升级吧,升级过后发现网站nginx报502错误,很明显是php与nginx这块的衔接问题(因为别的本人都没动过)。 解决方案如下: 1.检查Nginx配置文件 首先打开Nginx的配置文件查看: 我们发…

    HTTP经验 2020年1月15日
    08.4K3
  • URI、URL、URN的区别

    一个HTTP请求的目的是呼叫“资源”,可以是文档、照片或其他任何内容。那如何表达“资源”的唯一性呢? URI URI 指统一资源标识符(Uniform Resource Identifier),用来标识资源的唯一性。 URL URL 指统一资源定位符(Uniform Resource Locator),URI的子集,是…

    HTTP经验 2020年9月17日
    01.7K0
  • OSI7层网络参考模型的详解

    第7层:应用层 各种应用程序协议。 比如:HTTP(S)、FTP、SMTP、POP3、DNS(域名解析协议)、DHCP(IP动态配置协议)、腾讯QQ即时通讯私有协议、WeChat腾讯微信即时通讯私有协议、TikTok抖音短视频软件私有协议、RPC远程过程调用协议、TeamViewer软件远程连接控制私有协议、Thund…

    HTTP经验 2021年11月26日
    07230

发表回复

登录后才能评论