学PHP不能不懂的cookie知识

2024-06-21 03:18
文章标签 php 知识 cookie 不能不

本文主要是介绍学PHP不能不懂的cookie知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、生活中的cookie


  无论你知不知道Cookie是什么,在你的生活中,肯定有使用过它。还记得你使用浏览器浏览网页时,当你要登陆时,网页上有一个记住密码或自动登陆的选项,当你选择时,你就使用了Cookie。那么在下次访问该网站时,你可能就已经自动地登陆了,而不需要从重输入用户名和密码,至于它是怎么实现的,我们在下面说明。
  为什么会有Cookie的存在?因为HTTP服务器是无状态的,即它不会记录任何的用户和连接信息。而一个Web站点通常希望能够识别用户,既可能是因为服务器想限制用户的访问,或可能是因为它想把内容与用户身份关联起来。为此,HTTP使用了cookie,它可以跟踪用户。


  二、cookie技术的组成


  在了解cookie的工作原理之前,我们先来了解一下cookie技术的组成,它由4部分组成,如下:
  (1)在HTTP响应报文中有一个cookie首部行;
  (2)在HTTP请求报文中有一个cookie首部行;
  (3)在用户端系统中保留有一个cookie文件,由用户浏览器管理;
  (4)在Web站点有一个后端数据库;


  三、cookie的工作原理


  在了解了cookie技术的组成之后,我们来看看cookie是怎么工作的。下面就以主机A中的浏览器访问网站xxx作为例子来分析cookie的工作原理吧。
  首先主机A使用浏览器上网,当主机A第一次访问xxx网站时,当请求报文到达xxx的Web服务器时,该Web服务器将产生一个唯一识别码(例如:12345),并以此作为索引在它的后端数据库中产生一个表项,并用Set-cookie:首部行和刚才产生的值为设置HTTP响应报文的首部。这样在HTTP响应报文的首部,我们就可以看到这样的一个首部行——Set-cookie: 12345.
  当主机A的浏览器收到该HTTP响应报文时,它会看到Set-cookie:首部,然后浏览器在它的本地cookie文件上加入一行,其中包括Set-cookie:首部行中的识别码。
  由于主机A的cookie文件已经有了用于xxx网站的表项,因此当主机A的浏览器继续浏览xxx网站时,每请求一个Web页面,其浏览器就会从它的cookie文件中获取到xxx网站的识别码,并放入HTTP请求报文中cookie首部行中,即加入了首部行Cookie: 12345。
  当xxx网站的服务器收到该包含Cookie首部行的HTTP请求报文后,服务器通过查询后端服务器,确定cookie标识码对应的用户,从而可以直接知道用户的信息(即知道确实有一个这样的用户,不久前登陆过该网站)。
  注意,在cookie的方式下,xxx网站的服务器可以跟踪主机A在该站点的活动,xxx Web站点并不需要知道主机A的用户是谁,但是,它确切地知道用户12345访问了哪些页面,按照什么顺序,在什么时间。
  简单点来说,cookie用于标识用户,用户首次访问站点时,可能需要提供一个用户标识,但在后继的访问中,浏览器向服务器传递一个cookie首部,供服务器识别该用户。因此cookie可以在无状态的HTTP上建立一个用户会话层,允许服务器通过用户与应用程序之间的会话对用户进行验证。


  四、cookie带来的问题


  然而,cookie的使用可能会带来一定的问题。
  第一,就是用户的隐私问题,从上面的讨论中,我们可以看到,网站能过我们的cookie识别号,可以知道我们在什么时候做过什么事情。

  第二,就是信息的安全问题,从上面的论述中,我们可以知道,服务器并没有进行必要的检查,即服务器取出包含Cookie首部行的请求报文的cookie识别号,再到后端服务器查询,就能确定用户,而不管这个请求报文是否是由原本的主机发送的报文。换句话来说,如果不怀好意的人,拿到了我们的cookie识别号,并用我们的cookie标识号填充HTTP请求报文,发送给xxx网站的Web服务器,就能冒充我们去做很多他想做的事情,获得很多他们想获得的信息。

转自http://bbs.itcast.cn/thread-23989-1-1.html

这篇关于学PHP不能不懂的cookie知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080059

相关文章

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

JavaScript中document.cookie

“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。”—— MSIE 帮助。一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件、程序等创建的,但是 javascript 也提供了对 Cookies 的很全面的访问权利。       每个 Cookie 都是这样的:<cookie名>=<值>   <cookie名>的限制与 javasc

php中json_decode()和json_encode()

1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json