热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

谁动了你的cookie

谁动了你的cookie呵呵,标题只是为了好玩。最近好几个人问我,cookie到底是什么,能不能用通俗的语言解释一下。他们只知道cookie的字面意思是小甜饼,

谁动了你的COOKIE

 

呵呵,标题只是为了好玩。

 

最近好几个人问我,COOKIE到底是什么,能不能用通俗的语言解释一下。他们只知道COOKIE的字面意思是小甜饼,似乎与安全隐私有关。至于COOKIE的具体用途,全然不知。这个小甜饼与网络如何扯上关系,似乎风马牛不相及的事情。

 

实际上,有些命名规则,是说不清道不明的,一定置身于作者所在的文化背景下,才能体会作者的深意。比如,Java为什么叫Javagoogle为什么叫googleapache为什么叫apache,如此等等,如果当事人不给点提示,我们是无法知道这些名字来历的。

 

抛开小甜饼还是小咸饼不谈,我们先解释一下COOKIE的功能吧。这要从HTTP协议说起,HTTP是一种无状态协议,即按HTTP协议本身要求,前后两次请求是没有依赖关系的,比如你先浏览哪个网页,再浏览哪个网页,HTTP协议本身是不作限制的。这也正常,协议只提供机制,而不提供策略,完全是情合理的。

 

问题在于现实不同于理想,在实际应用中,一些请求是有依赖关系的,最常见的信箱、论坛和博客等,只有登录成功后,才能使用它的全部功能。登录了,你才能收发邮件,才能发贴子,才能写博客。服务器就需要知道你是否登录了,这个信息就是状态,即登录状态。

 

这个矛盾如何解决呢?如何在无状态的协议上实际有状态的服务呢?得有一种方法才行,这种方法就是COOKIE,说白了,COOKIE就是WEB服务器保存客户端(即浏览器)中的状态信息,在后面请求中,浏览器会把这些信息回传给WEB服务器,WEB服务器通过这些COOKIE检查是否登录过了。当然COOKIE不限于保存登录信息,它只是一种技术手段,服务器想用它保存什么都行,看需要而定。

 

COOKIE为什么会涉及到安全问题呢?这是显而易见的,虽然一般COOKIE都是经过加密处理过的,正如保险箱里的钱未必是保险的一样,加密后的信息未必不能被泄露。对于设计得不好的服务器程序来说,COOKIE可以直接被非法利用。

 

既然把COOKIE放在客户端(即浏览器)会有安全隐患,为什么不把这些状态放在服务器上呢?其实,这也是迫不得已的,这种做法从技术实现上考虑,没有丝毫困难。但是在现实中行不通,你想想,一个网站可能被数以千万的用户使用,有的状态信息可能要保存数月之久,这要保存多少信息!这种做法开销太大。

 

服务器在请求客户端(即浏览器)保存信息时,在下传的HTTP响应头中包含Set-COOKIE字段,在客户端(即浏览器)回传信息给服务器时,在HTTP请求头中包含COOKIE字段。

 

COOKIE的格式为:

key1=value1;key2=value2; expires=...; domain=...; path=...; secure

l         key1=value1;key2=value2;代表服务器所要保存的有效数据。

l         expires表示COOKIE的生命期,过期之后就无效了,比如有的网站要求你过一段时间后重新登录,就是通过它来实现的。

l         Domainpath表示COOKIE的作用范围,即在哪些网网页上有效。

l         Secure表示该COOKIE是不是只适用于HTTPS的请求。

 

下面是一个例子:

telnet www.google.com 80

HEAD /intl/zh-CN/ HTTP/1.1

Host: www.google.com

 

 

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html

Set-COOKIE:PREF=ID=2595b468a53b7221:NW=1:TM=1145015023:LM=1145015023:S=iASetSIzh8_sHPue; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com

Server: GWS/2.1

Content-Length: 0

Date: Fri, 14 Apr 2006 11:43:43 GMT

 


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
飞飞飞070801
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有