【问题标题】:Where are $_SESSION variables stored?$_SESSION 变量存储在哪里?
【发布时间】:2010-10-02 01:30:46
【问题描述】:

$_SESSION 变量是存储在客户端还是服务器上?

【问题讨论】:

  • 在您运行 php 应用程序的服务器上,您必须使用 phpinfo() 检查具体路径

标签: php


【解决方案1】:

$_SESSION 变量存储的位置由 PHP 的 session.save_path 配置决定。通常这是在 Linux/Unix 系统上的/tmp。如果不能 100% 确定,请使用 phpinfo() 函数查看您的特定设置,方法是在您的域的 DocumentRoot 中创建一个包含此内容的文件:

<?php
    phpinfo();
?>

这里是有关此配置设置的 PHP 文档的链接:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

【讨论】:

    【解决方案2】:

    如前所述,内容存储在服务器上。但是,会话由会话 ID 标识,会话 ID 存储在客户端并随每个请求一起发送。通常会话 ID 存储在 cookie 中,但也可以附加到 url。 (这就是您有时会看到的 PHPSESSID 查询参数)

    【讨论】:

    • +1 因为你已经暗示 cookie 不存储 $_SESSION 的内容(这些内容存储在服务器上,因此不容易被客户端修改)
    • 优秀的答案!我正在寻找这个问题:“为什么删除浏览器缓存后会话会过期?”。你拯救了我的一天。
    • 服务器创建文件 sess_7nu9p0fvidvva6ouaugqcc8292 和浏览器警报(getCookie('PHPSESSID'));//7nu9p0fvidvva6ouaugqcc8292
    • Plus1 - 用于回答问题:“......存储在客户端还是服务器上?”
    【解决方案3】:

    它们通常存储在服务器上。它们的存储位置取决于您作为开发人员。您可以使用session.save_handler 配置变量和session_set_save_handler 来控制会话如何保存在服务器上。默认保存方法是将会话保存到文件。保存它们的位置由session.save_path 变量控制。

    【讨论】:

      【解决方案4】:

      一个补充:应该注意的是,如果“/tmp”是存储会话数据的目录(这似乎是默认值),则在该 Web 服务器重新启动后会话将不会持续存在,因为“/tmp”通常在重新启动期间被清除。客户端持久性的概念与服务器上存储的持久性有关——如果“/tmp”目录用于会话数据,这可能会失败。

      【讨论】:

        【解决方案5】:

        在 Debian 上(大多数 Linux 发行版不是这样吗?),它保存在 /var/lib/php5/ 中。如上所述,它是在您的 php.ini 中配置的。

        【讨论】:

          【解决方案6】:

          我使用的是 Ubuntu,我的会话存储在 /var/lib/php5 中。

          【讨论】:

          • 谢谢,这就是我想要的。是的,如果它们不在通常的位置,我需要打开 INI,但我只是想知道“嘿,会话通常存储在哪里?” /var/lib/php/sessions/ 是的。
          【解决方案7】:

          正如 Taylor 先生所指出的,这通常是在 php.ini 中设置的。通常它们作为文件存储在特定目录中。

          【讨论】:

            【解决方案8】:

            对于 ubuntu 16.10,会话保存在 /var/lib/php/session/...

            【讨论】:

              【解决方案9】:

              在我的 Ubuntu 机器上,会话存储在

              /var/lib/php/sessions
              

              你必须在这个目录中sudo ls 只有ls 它会抛出

              ls: 无法打开目录'.': 权限被拒绝

              在我的 Windows Wamp 服务器上,php 会话存储在

              C:\wamp64\tmp
              

              如果你在 windows 上安装独立的 php,那么默认情况下没有设置值

              session.save_path => no value => no value
              

              【讨论】:

                【解决方案10】:

                它是如何工作的?它怎么知道是我?

                大多数会话在用户计算机上设置一个用户密钥(称为 sessionid),如下所示:765487cf34ert8dede5a562e4f3a7e12。然后,当在另一个页面上打开会话时,它会扫描计算机以查找用户密钥并运行到服务器以获取您的变量。

                如果您错误地清除了缓存,那么您的用户密钥也将被清除。由于您不知道自己的 id,因此您将无法再从服务器获取变量。

                【讨论】:

                  【解决方案11】:

                  可通过全局变量$_SESSION 访问的PHP 会话默认作为文件存储在服务器 上。对它的引用(称为session_id)也作为浏览器cookie存储在客户端。如果其中任何一个被删除,则会话无效。

                  您可以使用PHP Custom Session Handlers 将存储更改为数据库/Redis/memcache 等。还有一些可用于不同存储的扩展,例如 sqlite、memcache 和 memcached。

                  【讨论】:

                    【解决方案12】:

                    上面的许多答案都是不透明的。在我看来,这个问题的作者只是想知道会话变量默认存储在哪里。据此:https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions 它们只是默认存储在服务器上。希望其他人会发现这种贡献是有意义的。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-03-26
                      • 2018-02-01
                      • 2011-04-11
                      • 2010-09-18
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多