$_SESSION
变量是否存储在客户端或服务器上?
答案 0 :(得分:157)
$_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
答案 1 :(得分:125)
如前所述,内容存储在服务器上。然而,会话由session-id标识,session-id存储在客户端并随每个请求一起发送。通常会话ID存储在cookie中,但也可以附加到URL。 (那是你有时会看到的PHPSESSID
查询参数)
答案 2 :(得分:22)
它们通常存储在服务器上。它们存储的位置取决于您作为开发人员。您可以使用session.save_handler
配置变量和session_set_save_handler
来控制会话在服务器上的保存方式。默认保存方法是将会话保存到文件。它们保存的位置由session.save_path
变量控制。
答案 3 :(得分:18)
一个补充:应该注意的是,如果“/ tmp”是存储会话数据的目录(这似乎是默认值),则重新启动该Web服务器后会话将不会持续存在,如“/ tmp”通常在重启期间被清除。客户端智能持久性的概念随着服务器上存储的持久性而下降 - 如果“/ tmp”目录用于会话数据,则可能会失败。
答案 4 :(得分:12)
在Debian上(对于大多数Linux发行版来说不是这种情况吗?),它保存在/ var / lib / php5 /中。如上所述,它是在php.ini中配置的。
答案 5 :(得分:12)
我使用的是Ubuntu,我的会话存储在/ var / lib / php5中。
答案 6 :(得分:7)
正如泰勒先生指出的那样,这通常是在php.ini中设置的。通常它们作为文件存储在特定目录中。
答案 7 :(得分:4)
对于ubuntu 16.10,会话保存在/ var / lib / php / session /...
中答案 8 :(得分:1)
它是如何工作的?它是如何知道的?
大多数会话在用户计算机上设置了一个用户密钥(称为sessionid),如下所示:765487cf34ert8dede5a562e4f3a7e12。然后,当在另一个页面上打开会话时,它会扫描计算机以获取用户密钥并运行到服务器以获取变量。
如果您错误地清除了缓存,那么您的用户密钥也将被清除。由于您不知道自己的身份证明,因此无法再从服务器获取变量。
答案 9 :(得分:0)
在我的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 :(得分:-1)
上面的许多答案都是不透明的。我认为这个问题的作者只是想知道默认情况下会话变量存储在哪里。据此:https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions默认情况下,它们只是存储在服务器上。希望其他人会发现此贡献有意义。