cookie的诞生

HTTP无状态:服务器无法知道两个请求是否来自同一个浏览器,即服务器不知道用户上一次做了什么,每次请求都是完全相互独立

交互式Web:客户端与服务器可以互动,如用户登录,购买商品,各种论坛等等

Cookie的诞生是为了解决HTTP无状态的特性无法满足交互式web

cookie交互原理

1、用户在输入用户名和密码之后,浏览器将用户名和密码发送给服务器,服务器进行验证,验证通过之后将用户信息加密后封装成Cookie放在请求头中返回给浏览器。

2、浏览器收到服务器返回数据,发现请求头中有一个:Set-Cookie,然后它就把这个Cookie保存起来,下次浏览器再请求服务器的时候,会把Cookie也放在请求头中传给服务器

3、服务器收到请求后从请求头中拿到cookie,然后解析并到用户信息,说明此用户已登录,Cookie是将数据保存在客户端的

cookie属性

属性 描述

HttpOnly

标记为 Secure 的 Cookie 只应通过被HTTPS协议加密过的请求发送给服务端。使用 HTTPS 安全协议,可以保护 Cookie 在浏览器和 Web 服务器间的传输过程中不被窃取和篡改

Secure 如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的
Domain

Domain 指定了 Cookie 可以送达的主机名。假如没有指定,那么默认值为当前文档访问地址中的主机部分(但是不包含子域名)。

像淘宝首页设置的 Domain 就是 .taobao.com,这样无论是 a.taobao.com 还是 b.taobao.com 都可以使用 Cookie。

在这里注意的是,不能跨域设置 Cookie,比如阿里域名下的页面把 Domain 设置成百度是无效的

Path

Path 指定了一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 Cookie 。比如设置 Path=/docs/docs/Web/ 下的资源会带 Cookie 首部,/test 则不会携带 Cookie 首部。

Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL

Expires

当 Expires 属性缺省时,表示是会话性 Cookie,像上图 Expires 的值为 Session,表示的就是会话性 Cookie。当为会话性 Cookie 的时候,值保存在客户端内存中,并在用户关闭浏览器时失效。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话性 Cookie 也会被保留下来,就好像浏览器从来没有关闭一样。

与会话性 Cookie 相对的是持久性 Cookie,持久性 Cookies 会保存在用户的硬盘中,直至过期或者清除 Cookie。这里值得注意的是,设定的日期和时间只与客户端相关,而不是服务端

SameSite

SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)

重定向原理

客户端向服务器发送请求的时候,服务器如果重定向的话,返回状态码301或者302给客户端,在响应头中存放location,location对应的值就是重定向地址,客户端收到状态码为重定向,直接浏览器本地进行访问

一次线上问题排查过程

问题现象:

企业微信A企业,集成两个移动审批,分别使用wx_third和multi_wx3,在企业微信中交替访问两个移动审批,发现其中一个没有走对应集成方案的单点登录,比如打开multi_wx3的移动审批,实际url地址中的为wx_third,并且实际换取到用户身份也不是实际的值

移动计划在同场景下的数据交互实例

摘要

1、URL:https://qy-ci.fdccloud.com/appcenter/dispatch/open?__tenant_id=my59844a86a6053&__wx_menu_id=54&__from=wx_third2、URL:https://qy-ci.fdccloud.com/plan-  micro/my59844a86a6053/task/home/index?__from=wx_third3、URL:https://qy-ci.fdccloud.com/plan-micro/my59844a86a6053/task/home/index?__from=wx_third4、URL:https://qy-ci.fdccloud.com/plan-micro/my59844a86a6053/schedule/calendar/index?__from=wx_third#/message/index

批注:

1、请求分发地址dispatch/open,服务端告诉浏览器需要要重定向到真实的计划地址

2、浏览器开始请求真实的计划地址,服务端发现_from参数与cookie不一致,强制退出登录,并告诉浏览器再次重定向到当前页面,服务端同时设置了最新的cookie值与_from参数一致

3、浏览器再次请求计划的真实地址,同时携带了最新的cookie,重新进行了免登,移动计划再次告诉浏览器需要再次做重定向到计划的消息页面

4、浏览器开始请求计划的消息页面

移动审批在同场景下的数据交互实例

摘要

1、URL: https://qy-ci.fdccloud.com/appcenter/dispatch/open?__tenant_id=my59844a86a6053&__wx_menu_id=130&__from=multi_wx3

2、URL: http://qy-ci.fdccloud.com/workflow-micro/my59844a86a6053/workflow/process-list/index?kindType=1&status=0&__from=multi_wx3

3、URL: http://qy-ci.fdccloud.com/workflow-micro/my59844a86a6053/lists/process-list/index?kindType=1&status=0&__from=multi_wx3

4、URL: https://qy-ci.fdccloud.com/workflow-micro/my59844a86a6053/lists/process-list/index?kindType=1&status=0&__from=multi_wx3

批注:

1、请求分发地址dispatch/open,服务端告诉浏览器需要要重定向到真实的审批地址

2、浏览器开始请求真实的审批地址,移动审批在actions()方法中拦截到了当前是新服务,然后告诉浏览器要重定向到

新服务地址

3、浏览器开始请求移动审批的新服务地址,此时vendor beforeAction()检测到当前请求的地址是http协议,告诉浏览器需要重定向到https,并且把最新的cookie返回给了浏览器

4、浏览器开始请求https的审批地址,直接进入了应用,前面没有做任何退出登录,也不满足_from参数和cookie的值不一致,此时的用户实际身份还是上一个集成方案对应的用户

总结:

为何审批的执行流程和计划相差这么大,正是这个差别导致计划表现正常而审批发生串号的问题所在。

问题根源在于我们期望是在beforeAction()中实现检测__from的变更,从而实现退出登录,通过重定向再次登录的逻辑。但是审批比较特殊,他们在几个重要的控制器中重写了actions()方法,他们也会做重定向,而且actions()是在beforeAtion()之前执行的,最新的cookie已经被审批返回给浏览器了,下次再进入最终的审批页面时,beforeAction()是检测不到变更的,自然也实现不了退出登录再重新登录

苹果cookie是打开还是关闭_cookie那些事相关推荐

  1. Xcode苹果iOS硬件编程实现iPhone XR打开或关闭电灯

    之前我们已经给广大爱好者或程序员朋友们,带来了硬件版的或者说物联网版本的Hello World C++Builder/Delphi/VB.net/Python版的程序源码和教学资料,让大家对硬件控制带 ...

  2. ubuntu 如何关闭离线模式_如何在macOS中打开或关闭Mac暗黑模式

    苹果在macOS Mojave中为Mac引入了暗模式.暗模式是系统级别的设置,可与Mac随附的所有应用一起使用.第三方应用也可以选择使用暗黑模式.暗黑模式使您更轻松地专注于工作,并且对眼睛也很容易.装 ...

  3. 屏幕正中间浮窗html,HTML 纯css浮窗居中和打开or关闭

    HTML 纯css浮窗居中和打开or关闭 .fixed{ position: fixed; left: -100%; right:100%; top:0; bottom: 0; text-align: ...

  4. 最近发现有很多人一直在问苹果ID双重认证怎么关闭。

    最近发现有很多人一直在问苹果ID双重认证怎么关闭? 其实我想说大家都粗心了,双重认证是和ios版本没有关系的,无论什么IOS版本开通的双重认证都是可以关闭的. https://support.appl ...

  5. 打开和关闭wifi和移动数据链接

    最新实战教程,让你了解Android自动化刷量.作弊与防作弊的那些事,案例:刷友盟统计.批量注册苹果帐号 前一段时间,公司里面有一个这样的需要,就是要控制用户的连网方式,当时一听,wifi还好控制啦, ...

  6. Mac使用技巧:怎样打开、关闭屏幕共享!

    如何打开或关闭Mac屏幕共享?您可以使用屏幕共享在离开时访问您的 Mac,在其他人的 Mac 上解决问题,或者就网站或演示文稿等项目与其他人展开协作. 如果在 Mac 上启用了屏幕共享,则可以从网络上 ...

  7. ios获取新数据要不要关_ios13低数据模式什么意思要不要打开 开启关闭设置教程...

    ios13低数据模式什么意思要不要打开 开启关闭设置教程 虽然使用无限流量套餐的用户越来越多,但根据 Apple 的调查显示,绝大多数 iPhone 和 iPad 用户还是会密切关注自己的蜂窝网络数据 ...

  8. C++ 笔记(21)— 处理文件(文件打开、关闭、读取、写入)

    C++ 提供了 std::fstream ,旨在以独立于平台的方式访问文件. std::fstream 从 std::ofstream 那里继承了写入文件的功能,并从 std::ifstream 那里 ...

  9. Matlab学习笔记——文件的打开与关闭

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 文件的打开与关闭 1.fopen函数 2.fclose函数 文件的打开与关闭 1.fopen函数 用于打开文件,其 ...

最新文章

  1. 区块链 + 大数据:EOS存储
  2. R语言数据结构之列表
  3. 网站如何布局才能更利于提升用户体验?
  4. 对OCR文字识别软件进行自动分析和识别设置的教程
  5. JSP Cookie案例
  6. 神经网络,流形和拓扑Neural Networks, Manifolds, and Topology
  7. Simple2D-15(音乐播放器)使用 glfw 库
  8. Spark utils —— 设置日志级别
  9. 服务器虚拟机操作系统,服务器虚拟机操作系统
  10. 智能合约语言 Solidity 教程系列5 - 数组介绍
  11. C++封装继承多态理解
  12. 驱动精灵万能网卡版单文件版 v9.61
  13. 矩阵的特征值与特征向量 求解
  14. pycharm新建项目时选择virtualenv与existing interpreter
  15. 如果iis的配置文件 applicationHost.config坏掉了, 会在 C:\inetpub\history\ 中存储历史备份。复制过去还原就可以了-摘自网络...
  16. mac 打开网页慢_在Mac电脑开启Safari速度总是很慢?可以试试这10种解决方法
  17. uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及
  18. java面试突击-2022最新迭代redis\mq\springCloud-纯手打
  19. C#网络编程 - 局域网聊天室(UDP)
  20. Selenium IDE录制脚本——Chrome浏览器使用介绍

热门文章

  1. Android融云会话及会话列表的实现
  2. adobe xd_如何在Adobe XD中创建简历简历网站模板
  3. 编程python入门可以嘛_我为什么选择python——对于编程零基础的人为什么建议从Python入门...
  4. LUNA崩了背后的原因
  5. java io 阻塞io_Java 阻塞IO-Java BIO-嗨客网
  6. 【解决方案】SkeyeVSS视频安防综合管理系统助力解决夜吃烧烤安全隐患,为夜市安全保驾护航
  7. 程序员客栈TOP收入的萌系开发者心得-雨晴
  8. 阿里巴巴为新项目收购两枚双拼域名?
  9. GB 15981消毒与灭菌效果的评价方法与标准
  10. 百度Aistudio飞桨七日游体验python爬虫和分析数据