PHP 或任何其他服务器端语言如何在客户端计算机上存储会话?
你能帮帮我吗?
存储在服务器上。在文件系统上(通常在 tmp 文件夹内(或数据库内(如果已设置数据库会话处理(。有时,它们会存储在缓存守护程序(如 Memcached(中。无论哪种方式,会话数据都存储在服务器上,而不是存储在客户端计算机上。
在客户端,您通常会有一个 Cookie,其中包含用于将用户链接到存储在服务器上的会话数据的会话 ID。在某些情况下,此 ID 可能会被强制附加到 URL,这就是为什么您有时会在其 URL 中遇到将 PHPSESSID 作为 GET 参数的网站。
基本上,当您访问一个网站时,该网站将读取存储在您机器上的cookie中的PHPSESSID。然后,它会使用该 ID 查找与您的访问相关的会话数据。
用户的浏览器中存储一个 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 请求传输的。