当前位置: 首页 > 后端技术 > PHP

Cookie和Session详解(hu)解决方案(che)【拿去面试】

时间:2023-03-29 23:13:06 PHP

1.CookieCookie是浏览器访问服务器后,服务器发送给浏览器的一段数据。HTTP标头格式是从Web服务器发送的。浏览器将Cookie以名为“Cookie”的HTTP头格式发送回服务器。Cookie以文件的形式保存在浏览器端。之后,浏览器每次访问服务器,都要带上这个包含多个字段'过期时间','路径','域名'的数据Cookie是在客户端保持状态的解决方案,补充了HTTP无状态协议的特点2.SessionSession是一种在服务器端保持状态的解决方案。当用户打开浏览器访问网站时,服务器端生成的sessionID,传给浏览器的Cookie被保存下来,每次请求都会自动带上sessionID,然后服务器根据请求找到对应的Session值到会话ID。应用程序的无状态和无连接特性,那么什么才可以称为“无状态”呢?所以我们可以简单梳理一下通信过程(见下图),位于应用层之下的TCP/IP协议对数据的逐层封装,这样我们就可以从一个客户端到服务器(或另一个客户端)数据交换似乎是端到端的,隐藏了数据封装和验证层。那么,这个模型中的“无国籍”体现在哪里呢?大致可以理解为【C端是追求者,S端是人见人爱的女神】,我从C端发了一句话给S端,“你喜欢我吗”,S端回答“我喜欢”,C方问“你喜欢我什么”,S方却回答“我什么时候喜欢你的”……其实我的意思是解释一下“无状态”就是没有情感,没有上下文,这是一个匿名交互。写这篇之前看了很多文章,把“stateless”归类为HTTP协议的一个_defect_,但我认为它更多的是一个_feature_,从WIKI百科的描述中可以看出这句话High-trafficwebsitesoftenbenefit来自代表上游服务器传递内容以提高响应时间的网络缓存服务器可以理解为HTTP协议为“高速通信”带来好处,历史选择了这种机制。但随着发展,我们不再需要匿名交流,我们需要知道对方是谁,期待以下对话场景:C端:“你喜欢我吗?”S端:“我喜欢你”C端:“喜欢我什么我”S端:“全部”......emmmmmm......这可能是我们想要的效果,我们需要知道对方是谁一方是,知道上下文是什么,需要维护对方是谁的_状态_。于是Cookie和Session出现了,分别用来维护C端和S端“我是谁”的状态。如果你想听到更好的故事,下面的可能更有效。我常去的一家咖啡店有免费喝5杯咖啡的折扣。但是一次消费5杯咖啡的几率是很小的,所以用某种方式来记录某位顾客的消费量。设想以下解决方案:1、这家店的店员很好,能记住每个顾客的消费金额。只要顾客走进咖啡店,店员就会知道如何应对。这种做法是协议本身支持状态。2.给客户发一张卡,上面记录消费金额,一般都有有效期。消费者每次消费,如果顾客出示卡片,则此次消费将与之前或未来的消费挂钩。这种方法是在客户端维护状态。3、给客户发一张会员卡,除了卡号外,不记录任何信息。当顾客每次出示卡时,店员会在店内的记录簿中查找卡号对应的记录,并添加一些消费信息。.这种做法是在服务器端维护状态。4.Cookie和Session的关系WIKI上介绍Session的时候首先引用了Cookie的解释。客户端会话使用cookie和加密技术来维护状态,而无需在服务器上存储太多数据。呈现动态网页时,服务器将当前状态数据以cookie的形式发送到客户端(网络浏览器)。客户端将cookie保存在内存或磁盘上。对于每个连续的请求,客户端将cookie发送回服务器,服务器使用该数据“记住”该特定客户端的应用程序状态并生成适当的响应。我只翻译第一句话。clientsession使用cookie和加密技术来保持状态,很容易发现它们的作用大致相同,存储位置不同,我们用一个PHP程序来解释一下后端代码: