【发布时间】:2010-10-02 01:30:46
【问题描述】:
$_SESSION 变量是存储在客户端还是服务器上?
【问题讨论】:
-
在您运行 php 应用程序的服务器上,您必须使用 phpinfo() 检查具体路径
标签: php
$_SESSION 变量是存储在客户端还是服务器上?
【问题讨论】:
标签: php
$_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
【讨论】:
如前所述,内容存储在服务器上。但是,会话由会话 ID 标识,会话 ID 存储在客户端并随每个请求一起发送。通常会话 ID 存储在 cookie 中,但也可以附加到 url。 (这就是您有时会看到的 PHPSESSID 查询参数)
【讨论】:
它们通常存储在服务器上。它们的存储位置取决于您作为开发人员。您可以使用session.save_handler 配置变量和session_set_save_handler 来控制会话如何保存在服务器上。默认保存方法是将会话保存到文件。保存它们的位置由session.save_path 变量控制。
【讨论】:
一个补充:应该注意的是,如果“/tmp”是存储会话数据的目录(这似乎是默认值),则在该 Web 服务器重新启动后会话将不会持续存在,因为“/tmp”通常在重新启动期间被清除。客户端持久性的概念与服务器上存储的持久性有关——如果“/tmp”目录用于会话数据,这可能会失败。
【讨论】:
在 Debian 上(大多数 Linux 发行版不是这样吗?),它保存在 /var/lib/php5/ 中。如上所述,它是在您的 php.ini 中配置的。
【讨论】:
我使用的是 Ubuntu,我的会话存储在 /var/lib/php5 中。
【讨论】:
正如 Taylor 先生所指出的,这通常是在 php.ini 中设置的。通常它们作为文件存储在特定目录中。
【讨论】:
对于 ubuntu 16.10,会话保存在 /var/lib/php/session/...
【讨论】:
在我的 Ubuntu 机器上,会话存储在
/var/lib/php/sessions
你必须在这个目录中sudo ls 只有ls 它会抛出
ls: 无法打开目录'.': 权限被拒绝
在我的 Windows Wamp 服务器上,php 会话存储在
C:\wamp64\tmp
如果你在 windows 上安装独立的 php,那么默认情况下没有设置值
session.save_path => no value => no value
【讨论】:
它是如何工作的?它怎么知道是我?
大多数会话在用户计算机上设置一个用户密钥(称为 sessionid),如下所示:765487cf34ert8dede5a562e4f3a7e12。然后,当在另一个页面上打开会话时,它会扫描计算机以查找用户密钥并运行到服务器以获取您的变量。
如果您错误地清除了缓存,那么您的用户密钥也将被清除。由于您不知道自己的 id,因此您将无法再从服务器获取变量。
【讨论】:
可通过全局变量$_SESSION 访问的PHP 会话默认作为文件存储在服务器 上。对它的引用(称为session_id)也作为浏览器cookie存储在客户端。如果其中任何一个被删除,则会话无效。
您可以使用PHP Custom Session Handlers 将存储更改为数据库/Redis/memcache 等。还有一些可用于不同存储的扩展,例如 sqlite、memcache 和 memcached。
【讨论】:
上面的许多答案都是不透明的。在我看来,这个问题的作者只是想知道会话变量默认存储在哪里。据此:https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions 它们只是默认存储在服务器上。希望其他人会发现这种贡献是有意义的。
【讨论】: