共计 2045 个字符,预计需要花费 6 分钟才能阅读完成。
前言:cookie
http 申请是无状态的,即每次服务端接管到客户端的申请时,都是一个全新的申请,服务器并不知道客户端的历史申请记录;所以当用户从客户端申请一次登录胜利后,再次进行申请时,会再次弹出登录对话框。
为了解决这个问题,于是,咱们把服务器中产生的会话 sessionID 存储到客户端浏览器 cookie 中去。在客户端同一个会话期间,不须要从新登录认证,浏览器敞开时,会话完结,cookie 革除。这样便解决了客户端申请服务端会话不同步问题。
背景:web 我的项目应用 OTAP 协定 session 认证形式
协定文档阐明:
服务器返回的受权 SessionID 通过 HTTP 头的 Set-Cookie 进行返回,同时设置 HttpOnly, 防止受权 SessionID 被偷盗的危险。因为同一个域上面不能设置 KEY 一样的两个 Cookie,为了解决 NVR 虚构 IP 跳转 IPC 的问题,Cookie 中 SessionID 的 KEY 必须是不同的,咱们定义命名规定为:"WebSession_"+SHA256(设施 MAC 地址 + 设施序列号)。这样,对于 NVR 连贯的不同 IPC,其中 MAC 地址和设施序列号就应用 IPC 的,就能够做到 SessionID 的 KEY 不同。登陆时,客户端发送登陆申请后,设施回应受权 SessionID 如下所示:HTTP/1.1 200 OK
……
Set-Cookie:WebSession_dfwheefi12=d59eddce7053eb5e1a94fd8239b6f1a1d59eddce7053eb5e1a94fd8239b6f1a1;path=/;HttpOnly
Cookie 的 expires 字段不设置,防止设施因为未校时,导致 Cookie 永远过期。受权 SessionID 的过期工夫依附心跳机制。客户端登陆后,再发送申请时,在 HTTP 中的 Cookie 里带上受权 SessionID:…
Cookie:WebSession_dfwheefi12=7e91b638bbd1abbbce1effe1931cec97d59eddce7053eb5e1a94fd8239b6f1a1
概括为:这种 session 认证形式,由服务器端通过 Set-Cookie:“WebSession_XXX”命令,向客户端发送 cookie 的响应,客户端接管到响应后,在本机客户端设置了一个 WebSession_XXX 的 cookie 信息;
当再次发送申请(申请 URL 与 cookie 的属性 Domain 和 Path 统一)时,cookie 信息则会蕴含在 HTTP 申请的头部中,一起发送,实现认证(该 cookie 在浏览器会话完结时过期);
应用场景:别离通过 http、https 两种形式拜访同一设施时,会呈现 cookie 中 websession 信息互串景象,导致传输加解密失败
Cookie 的次要属性:
在 chrome 控制台中的 Application 选项卡中能够看到 cookie 的信息,一个域名上面可能存在着很多个 cookie 对象。
Name 属性为一个 cookie 的名称。
Value 属性为一个 cookie 的值。
Domain 属性为能够拜访此 cookie 的域名。
Path 属性为能够拜访此 cookie 的页面门路。
Expires/Max-Age 属性为此 cookie 超时工夫。
Size 属性此 cookie 大小。
Httponly 属性 cookie 的 httponly 属性。
Secure 属性设置是否只能通过 https 来传递此条 cookie
Web 我的项目开发中为保障 http 申请下能够拜访服务器,所以不设置 secure 字段,即容许 http、https 来传递 cookie;
产生 websession 互串的起因:
当用户 http 申请一个页面,并且通过登录认证后,此时服务器通过申请头设置 cookie 信息,在浏览器的 cookies 中会新增一条对于以后域名的 cookie 信息,cookie 属性中 Domain 记录了服务器域名 IP,即容许该域名服务器拜访与批改以后 cookie;
在咱们另外申请雷同域名的 https 申请并登录认证后,此时,新的认证信息 websession 会从新写到浏览的 cookies 中的雷同域名下 websession 信息中,此时就会笼罩掉 http 申请时的认证信息;
图像化展现如下:
同理,先发送 https 申请,再发送 http 申请,前面一次的申请认证信息 websession 同样会对前一次的进行笼罩,导致 websession 互串;
在理论参加的我的项目中,传输加密局部,加密信息与认证信息进行了关联,所以在前一次的认证信息被笼罩后,尽管新的认证信息能够在前一个页面中,发送申请通过认证,然而因为传输加密信息与前一次的认证信息做了关联,与新的认证信息不匹配,所以会呈现传输加密失败的问题;
解决方案:解除加密信息与认证信息的关联
在剖析起因后,与设备组、协定组共事共同商定,决定将加密信息与认证信息关联解除,设施激活后,加密信息放弃不变,确保认证信息被笼罩时,不会影响加密性能,直到设施被重置,加密信息更新;