cookie (websession互串的原因)

前言: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=/; HttpOnlyCookie的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互串;
在实际参与的项目中,传输加密部分,加密信息与认证信息进行了关联,所以在前一次的认证信息被覆盖后,虽然新的认证信息可以在前一个页面中,发送请求通过认证,但是由于传输加密信息与前一次的认证信息做了关联,与新的认证信息不匹配,所以会出现传输加密失败的问题;
解决方案:解除加密信息与认证信息的关联 【cookie (websession互串的原因)】在分析原因后,与设备组、协议组同事共同商定,决定将加密信息与认证信息关联解除,设备激活后,加密信息保持不变,确保认证信息被覆盖时,不会影响加密功能,直到设备被重置,加密信息更新;

    推荐阅读