【问题标题】:How are session variables accessed in PHP? [closed]如何在 PHP 中访问会话变量? [关闭]
【发布时间】:2013-09-26 18:54:51
【问题描述】:

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

你能帮帮我吗?

【问题讨论】:

  • 会话不存储在客户端,它们存储在服务器上。
  • 服务器上的会话由自动放置在客户端计算机上的 cookie 引用。每次访问都会提供该 cookie 代码,该代码用于查找会话详细信息,通常来自临时存储中的文件。如果您开始一个会话并在 PHP 中存储一些内容,请查看该站点的 cookie - 您会发现您有一个新的。
  • @David 通常不是(我建议不应该).. 但是,会话 可以 完全在 cookie 中实现,无需服务器商店。而且,我认为有一个(皱眉?)PHP设置允许这样做..
  • thnx... 那么php如何在浏览器中存储sess id

标签: php client session-variables


【解决方案1】:

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

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

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

【讨论】:

  • 那么php是如何将PHPSESSID存入浏览器cookie的呢?
  • @user2820823 通常在您向相关服务器发出 HTTP 请求后设置。服务器将使用 HTTP 响应进行响应,这基本上会询问您的浏览器是否很酷将 cookie 数据保存在您的计算机上。见en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie
  • thnx man....你能告诉我如何编写编译器来做到这一点吗?
  • @user2820823 请参阅en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie,您会很好地了解如何“询问”浏览器是否可以设置 cookie 数据。查看 Set-Cookie 标头。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      但是,“安全”使用 cookie 存储的工作量要大得多;即加密和 MAC 是所需的最少添加。 (见Storing Session Data In Cookies: Problems And Security Concerns To Be Aware Of。)


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

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 2012-04-08
        • 2013-05-17
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 2013-02-17
        相关资源
        最近更新 更多