【发布时间】:2011-02-26 15:31:31
【问题描述】:
任何人都可以向我解释会话在 PHP 中是如何工作的。例如。 3 个用户登录了 gmail。服务器如何识别这 3 个用户。这背后的内部流程是什么。
【问题讨论】:
任何人都可以向我解释会话在 PHP 中是如何工作的。例如。 3 个用户登录了 gmail。服务器如何识别这 3 个用户。这背后的内部流程是什么。
【问题讨论】:
PHP 会话如何工作
首先 PHP 创建一个唯一的标识符号(一个 32 的随机字符串 十六进制数,例如 3c7foj34c3jj973hjkop2fc937e3443) 个人会议。
PHPSESSID cookie 将该唯一标识号传递给用户浏览器以保存该编号。
正在向服务器创建一个新文件,其名称与具有 sess_ 前缀的唯一标识号的名称相同(即 sess_3c7foj34c3jj973hjkop2fc937e3443。)
Web 浏览器随每个请求将该 cookie 发送到服务器。
如果 PHP 从 PHPSESSID cookie 中获取唯一标识号(在每个请求中),则 PHP 在临时目录中搜索并比较该编号和文件名。如果两者相同,则检索现有会话,否则为该用户创建一个新会话。
当用户关闭浏览器或离开网站时,会话将被破坏。服务器也在预定的会话时间后终止会话这些是使用 PHP 处理会话的简单机制。我希望这篇文章能帮助你了解 PHP SESSION 是如何工作的。
有关详细信息,请参阅本文。 How Does PHP Session Works
【讨论】:
在标题顶部定义的 session_start() 函数...这将生成一个唯一编号。会话是与服务器通信的方式。服务器端和客户端的会话存储。浏览器将会话存储在 tmp 文件或 cookie 中。
Cookies 保留会话名称和值,它不放置会话数据。会话保存在服务器端的数据。当客户端向服务器发送请求时...服务器获取会话 ID 并将数据返回给客户端。 session_id 是从服务器端生成的,session_id 是识别请求来自哪里的方式。
【讨论】:
session_start() 函数生成一个随机会话 ID 并将其存储在用户计算机上的 cookie 中(这是唯一实际存储在客户端的会话信息。) cookie 的默认名称是 PHPSESSID,尽管这可以在服务器上的 PHP 配置文件中进行更改(但是,大多数托管公司将不理会它。)要在 PHP 代码中引用会话 ID,因此您将引用变量 $PHPSESSID(它是一个 cookie 名称;请记住从饼干?) 您的敏锐头脑可能想知道当您第二次通过页面并再次到达 session_start( ) 函数时会发生什么。 PHP 知道已经有一个正在进行的会话,因此忽略 session_start() 的后续实例
【讨论】:
会话由两个部分组成,客户端会话 ID 和服务器端会话数据。客户端可以将会话 ID 作为 URL 参数、cookie 甚至 HTTP 标头发送到服务器。 然后,服务器使用此会话 ID 来查找适当的会话数据以返回给客户端。
您可以通过各种session_ functions 调整会话行为。
【讨论】:
第一次打开网页(URL)时,您的浏览器会向该服务器发送请求,此时,标头不包含任何要包含的 cookie 或会话,然后,在服务器响应 Web 浏览器之后(用户代理)服务器可能会发送cookie或会话,此时浏览器将它们保存起来以备下次请求。
现在,当重新加载页面时,浏览器将cookie发送回服务器(包含在请求的标头中),然后服务器可以访问并验证它。
对于会话:它是一个临时cookie,将在关闭窗口后终止。
PHP 会话 PHP 为一个名为 PHPSESSID 的键值对使用会话 cookie,服务器依赖于该键的值并使用 PHPSESSID 的值找到等效的键值对。使用这种方法可以防止某种攻击,例如解密cookie的实际值,因为cookie保存了客户端PC中可以看到的所有键值对,而会话取决于一个键值对。
【讨论】:
会话是服务器端会话数据和客户端 cookie 的组合,客户端 cookie 只包含对正确的引用服务器上的数据。因此,当用户访问网站时,他们的浏览器会将参考代码发送到服务器,服务器会加载相应的数据。
这似乎比仅仅拥有一个包含所有数据的客户端 cookie 有点笨拙,但有一些优点:
同样重要的是要注意会话只持续到用户关闭浏览器,而 cookie 可以配置为持续更长时间。但是,除了上述之外,对于大多数用途而言,会话数据和 cookie 数据之间并没有太大区别。
The following 是一篇非常好的文章,它解释了会话和 cookie 在 PHP 中的工作原理。
【讨论】:
PHPSESSID GET var。
tmp 文件夹的人也可以(想想共享主机)。最好更改会话保存路径php.net/manual/en/function.session-save-path.php
会话非常简单。
当我登录到您的网站时,PHP 会设置一个带有“会话 ID”的标准浏览器 cookie — 通常是一个字母数字字符串,例如 63f1a67cf52b5d2bbd0cbef45e18b242。
与 所有 cookie 一样,我的浏览器会在我发出的每个请求时将该 cookie 发送回您的服务器。因此,您的应用程序现在知道带有 63f1a67cf52b5d2bbd0cbef45e18b242 会话 ID 的每个请求都来自我。
因此,如果您需要存储有关我的任何信息,可以在63f1a67cf52b5d2bbd0cbef45e18b242 下跟踪它。默认情况下,PHP 将此信息存储在 /tmp/ 目录中的文件中,尽管您可以覆盖它并将其存储在您喜欢的任何位置(例如,在数据库中)。重要的是将该会话 ID 与特定用户相关联。
我不想把事情过分简单化。有一些担忧(例如,如果入侵者看到我未加密的会话 ID 并开始自己使用它会怎样——他可能会开始伪装成我),并且有一些方法可以缓解这些担忧。但是将会话 ID 存储在 cookie 中并使用它来识别存储在服务器上的有关我的信息的基本机制是非常普遍的。
【讨论】:
饼干。
或url中的参数。
而这个互联网过程被称为HTTP协议。
【讨论】:
我认为 Gmail 使用的是 Python,而不是 PHP。
PHP 默认将其会话写入/tmp 目录。它可以配置为将会话存储在数据库中。
它通过 cookie 识别会话,但也可以配置为传递查询字符串,但它非常难看。
【讨论】: