2

PHP 或任何其他服务器端语言如何在客户端计算机上存储会话?

你能帮帮我吗?

4

4 回答 4

2

会话存储在服务器上。在文件系统上(通常在 tmp 文件夹内)或在数据库内(如果已设置数据库会话处理)。有时,它们会存储在诸如Memcached之类的缓存守护进程中。无论哪种方式,会话数据都存储在服务器上,而不是客户端机器上。

在客户端,您通常会有一个cookie,其中包含用于将用户链接到存储在服务器上的会话数据的会话 ID 。在某些情况下,此 ID 可能会被强制附加到 URL,这就是为什么您有时会遇到在其 URL 中使用 PHPSESSID 作为 GET 参数的网站。

基本上,当您访问一个网站时,该网站将读取存储在您机器上的 cookie 中的 PHPSESSID。然后它使用该 ID 来查找与您的访问相关的会话数据。

于 2013-09-26T18:59:07.133 回答
1

PHP 在用户的浏览器中存储一个 cookie。该 cookie 不存储任何会话数据,它只是唯一标识用户。会话数据存储在服务器上,并与用户的 cookie 相关联。

因此,当用户发出请求时,他们存储在 cookie 中的会话 ID 会随请求一起传递。服务器可以使用该会话 ID 来检索实际的会话数据并使其可用于 PHP 脚本。

于 2013-09-26T18:59:00.450 回答
1

它实际上是基于服务器的文件。当您调用 session_start() 时,PHP 会在您的服务器硬盘上创建一个文件,其中包含您在该会话中存储的任何内容。在客户端,他们得到一个 cookie(默认称为 PHPSESSID),其中包含与该文件对应的随机字符串。然后 PHP 使用随机垃圾收集来删除旧的会话文件。如果您希望会话持续时间超过 php.ini 中的超时时间,您可以创建自己的会话处理程序来执行诸如将它们存储在诸如 memcached 或您的数据库之类的东西中之类的事情。

这是 PHP 网站上相关的部分 http://www.php.net/manual/en/session.configuration.php

于 2013-09-26T19:00:09.727 回答
0

是的 - “会话[数据存储]在客户端计算机上”是可能的。

虽然会话数据通常存储在服务器端(使用客户端提供的标识符,通常以 cookie 的形式),但没有理由必须将会话数据存储在服务器端以实现相同的语义1

会话提供者可以直接将所有会话数据存储在 cookie 中。这意味着所有会话数据可以存储在客户端;并且有这样的提供者。

但是,“安全”使用 cookie 存储的工作量要大得多。即加密和 MAC 是所需的最少添加。(请参阅在 Cookie 中存储会话数据:需要注意的问题和安全问题。)


1实际上,会话数据的唯一“要求”是,在浏览器会话中,所有窗口/选项卡必须(能够)共享相同的会话数据。Cookie 是执行此操作的最简单方法,因为它们是根据某些规则为每个 HTTP 请求传输的。

于 2013-09-26T19:05:21.513 回答