$_SESSION变量是存储在客户端还是服务器端?
$_SESSION
正如泰勒先生指出的,这通常设置在 php.ini。通常它们以文件的形式存储在一个特定的目录中。
$_SESSION变量存储的位置由 PHP 的 session.save_path配置决定。通常这是 Linux/Unix 系统上的 /tmp。使用 phpinfo()函数来查看您的特定设置,如果不是100% 确定的话,可以在您的域的 DocumentRoot中创建一个包含此内容的文件:
session.save_path
/tmp
phpinfo()
DocumentRoot
<?php phpinfo(); ?>
下面是有关此配置设置的 PHP 文档链接:
Http://php.net/manual/en/session.configuration.php#ini.session.save-path
它们通常存储在服务器上。它们存放在哪里取决于你这个开发者。您可以使用 session.save_handler配置变量和 session_set_save_handler来控制如何在服务器上保存会话。默认的 save 方法是将会话保存到文件中。它们被保存的位置由 session.save_path变量控制。
session.save_handler
session_set_save_handler
如前所述,内容存储在服务器上。但是,会话由一个会话 ID 标识,该 ID 存储在客户端并随每个请求一起发送。通常会话 ID 存储在 cookie 中,但它也可以附加到 URL。(这是您有时会看到的 PHPSESSID查询参数)
PHPSESSID
在 Debian 上(大多数 Linux 发行版不都是这样吗?)它保存在/var/lib/php5/中。如上所述,它是在 php.ini 中配置的。
另外: 应该注意的是,如果“/tmp”是存储会话数据的目录(这似乎是默认值) ,那么在重新启动该 Web 服务器后,会话将不会持久,因为“/tmp”通常在重新启动期间被清除。客户端持久性的概念随着服务器上存储的持久性而变化——如果将“/tmp”目录用于会话数据,这种持久性可能会失败。
我正在使用 Ubuntu,我的会话存储在/var/lib/php5中。
对于 ubuntu 16.10,会话保存在/var/lib/php/session/..。
它怎么工作的? 它怎么知道是我?
大多数会话在用户的计算机上设置一个用户密钥(称为 sessionid) ,如下所示: 765487cf34ert8dede5a562e4f3a7e12。然后,当在另一个页面上打开一个会话时,它会扫描计算机以获取用户密钥,并运行到服务器以获取变量。
如果您错误地清除了缓存,那么您的用户密钥也将被清除。由于您不知道自己的 id,因此不能再从服务器获取变量。
上面的许多答案是不透明的。在我看来,这个问题的作者只是想知道会话变量默认存储在哪里。根据这个: https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions他们只是 默认情况下存储在服务器上。希望其他人会发现这个贡献是有意义的。
在我的 Ubuntu 机器会话存储在
/var/lib/php/sessions
你必须在这个目录中的 sudo ls只有 ls它将抛出
sudo ls
ls
不能打开目录
在我的 Windows Wamp 服务器上,php 会话存储在
C:\wamp64\tmp
如果你在 windows 上安装独立的 php,那么默认情况下没有设置值
session.save_path => no value => no value
缺省情况下,通过全局变量 $_SESSION访问的 PHP 会话以文件的形式存储在 服务器上。对它的引用(称为 session_id)也以浏览器 cookie 的形式存储在客户端。如果删除了其中的任何一个,则会话将变为无效。
session_id
您可以使用 PHP 自定义会话处理程序将存储更改为 database/Redis/memcache 等。此外,还有可用于不同存储的扩展,如 sqlite、 memcache 和 memcached。