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