如何在 PHP 中访问会话变量


How are session variables accessed in PHP?

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

你能帮帮我吗?

会话

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

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

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

PHP 在

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

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

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

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

是的

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

虽然会话数据通常存储在服务器端

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

会话

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

然而,"安全"使用cookie存储的工作要多得多;即加密和MAC是所需的最小附加功能。(请参阅在 Cookie 中存储会话数据:需要注意的问题和安全问题。


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