会话如何运作?

时间:2010-06-02 03:52:43

标签: php apache

任何机构都可以解释我在PHP中如何使用会话。例如。 3位用户登录了gmail。服务器如何识别这3个用户。那背后的内部流程是什么?

9 个答案:

答案 0 :(得分:24)

会话是服务器端会话数据客户端Cookie 的组合,客户端Cookie除了对正确的引用之外什么都不包含服务器上的数据。因此,当用户访问该站点时,他们的浏览器将参考代码发送到服务器,该服务器加载相应的数据。

这可能看起来有点笨拙而不仅仅是拥有包含所有数据的客户端cookie,但有一些优点:

  • 您的服务器端会话数据可以包含 非常大量的数据 麻烦 - 客户端cookie是 尺寸有限
  • 您的客户端Cookie包含 除了小参考之外别无其他 代码 - 因为这个cookie是每个传递的 有人访问你的页面 网站,你节省了很多 通过不转移大的带宽
  • 的客户端cookie
  • 会话数据更安全 - 只有你能够操纵它, 而不是客户端cookie 所有
  • 都可以编辑

同样重要的是要注意,会话只会持续到用户关闭浏览器,而cookie可以配置为持续更长时间。但是,除了上述内容之外,在大多数情况下,会话数据和cookie数据之间没有太大差异。

The following 是一篇非常好的文章,解释了会话和cookie如何在PHP中运行。

答案 1 :(得分:23)

会话由两个组件组成,客户端会话ID 服务器端会话数据。客户端可以将会话ID作为URL参数,cookie甚至HTTP标头发送到服务器。 然后,服务器使用此会话ID查找要返回给客户端的相应会话数据。

您可以通过各种session_ functions调整会话行为。

答案 2 :(得分:9)

会话非常简单。

当我登录您的网站时,PHP会设置一个带有“会话ID”的标准浏览器cookie - 通常是一个像63f1a67cf52b5d2bbd0cbef45e18b242这样的字母数字字符串。

所有 Cookie一样,我的浏览器会根据我发出的每个请求将该cookie发回给您的服务器。因此,您的应用程序现在知道会话ID为63f1a67cf52b5d2bbd0cbef45e18b242的每个请求都来自我。

因此,如果您需要存储有关我的任何信息,您可以在63f1a67cf52b5d2bbd0cbef45e18b242下跟踪它。默认情况下,PHP将此信息存储在/tmp/目录中的文件中,但您可以覆盖它并将其存储在任何您喜欢的位置(例如,在数据库中)。重要的是将该会话ID与特定用户相关联。

我不想过分简化。有一些问题(比如,如果入侵者看到我未加密的会话ID并开始自己使用它会怎样 - 他可以想象会开始伪装成我),并且有一些方法可以缓解这些问题。但是,将会话ID存储在cookie中并使用它来识别存储在服务器上的有关我的信息的基本机制非常普遍。

答案 3 :(得分:5)

我认为Gmail使用的是Python,而不是PHP。

PHP默认将其会话写入/tmp目录。它可以配置为将会话存储在数据库中。

它通过cookie识别会话,但也可以配置为传递查询字符串,但它非常难看。

答案 4 :(得分:1)

当第一次打开网页(URL)时,浏览器会向该服务器发送请求,此时,不包含任何cookie或会话的标头,然后,在服务器响应Web浏览器之后(用户代理)服务器可能会发送cookie或会话,此时,浏览器会保存它们以供下次请求使用。

现在,当重新加载页面时,浏览器将cookie发送回服务器(包含在请求的标题中),然后,服务器可以访问它并验证它。

对于会话:它是一个临时cookie,将在Windows关闭后终止。

PHP SESSION PHP将会话cookie用于一个名为 PHPSESSID 的键值对,服务器依赖于此键的值并使用PHPSESSID的值查找等效的键值对。使用这种方法可以防止某种类型的攻击,例如解密cookie的实际值,因为cookie可以保存客户端PC中的所有键值对,而会话取决于一个键值对。

答案 5 :(得分:1)

session_start()函数定义在标题的顶部...这将生成一个唯一的数字。会话是与服务器通信的方式。服务器端和客户端的会话存储。浏览器存储会话在tmp文件或cookie中。

Cookie保留会话名称和值不会放置会话数据。数据由服务器端的会话保存。当客户端向服务器发送请求时...服务器获取会话ID并将数据返回给客户端。 session_id从服务器端生成,session_id是从哪里识别请求的方式。

答案 6 :(得分:1)

PHP会话如何工作

  • 首先,PHP创建一个唯一的标识符编号(随机字符串为32 十六进制数,例如3c7foj34c3jj973hjkop2fc937e3443) 个人会议。

  • PHPSESSID cookie将该唯一标识号传递给用户浏览器以保存该号码。

  • 一个新文件正在向服务器创建,其名称与sess_前缀的唯一标识号相同(即sess_3c7foj34c3jj973hjkop2fc937e3443。)

  • Web浏览器会根据每个请求将该cookie发送到服务器。

  • 如果PHP从PHPSESSID cookie中获取该唯一标识号(在每个请求中),则PHP在临时目录中搜索并比较该号码和文件名。如果两者相同则检索现有会话,否则为该用户创建新会话。

当用户关闭浏览器或离开网站时会破坏会话。在预定的会话时间之后服务器也终止了会话。这些是使用PHP来处理会话的简单机制。我希望本文能帮助您了解PHP SESSION的工作原理。

有关详细信息,请参阅此文章。 How Does PHP Session Works

答案 7 :(得分:0)

一个cookie 或者网址中的参数。 这个互联网进程称为HTTP协议。

答案 8 :(得分:0)

session_start()函数生成随机会话ID并将其存储在用户计算机上的cookie中(这是实际存储在客户端的唯一会话信息。)cookie的默认名称是PHPSESSID,尽管这可以在服务器上的PHP配置文件中进行更改(但是大多数托管公司都不会这样做。)要在PHP代码中引用会话ID,您将引用变量$ PHPSESSID(它是一个cookie名称;请记住来自Cookies?) 你的敏锐头脑可能想知道当你第二次浏览你的页面并再次到达session_start()函数时会发生什么。 PHP知道已经有一个进度会话,因此忽略了session_start()

的后续实例