2009-01-18 80 views
142

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

+0

在您运行php应用程序的服务器上,对于具体路径,您必须检查phpinfo() – densityx 2018-01-01 13:51:31

回答

7

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

22

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

112

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

+34

+1,因为您暗示cookie不存储$ _SESSION的内容(这些内容存储在服务器上,所以不容易被客户修改) – shufler 2010-11-11 15:01:44

+9

优秀的答案!我正在搜索这个问题:“为什么会话在删除浏览器缓存后过期?”。你救了我的一天。 – Pupil 2013-06-17 07:50:31

12

在Debian上(对于大多数Linux发行版来说不是这种情况?),它保存在/ var/lib/php5 /中。如上所述,它是在你的php.ini中配置的。

18

另外还有一点需要注意的是,如果“/ tmp”是存储会话数据的目录(这似乎是默认值),那么在重新启动该Web服务器后会话将不会持续,因为“/ tmp”通常在重启过程中被清除。客户端持久性的概念随着服务器上存储的持久性而变化 - 如果将“/ tmp”目录用于会话数据,可能会失败。

12

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

3

的Ubuntu 16.10的会话保存在/ var/lib中/ PHP /会话/ ...

1

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

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

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