$ _SESSION变量存储在哪里?


158

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


在运行php应用程序的服务器上,对于特定路径,您必须使用phpinfo()检查
densityx '18

Answers:



129

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


41
+1,因为您已经暗示Cookie不存储$ _SESSION的内容(这些内容存储在服务器上,因此不容易受到客户端的修改)
shufler 2010年

12
很好的答案!我正在搜索以下问题:“为什么删除浏览器缓存后会话会过期?”。你救了我的一天。
2013年

2
服务器创建文件sess_7nu9p0fvidvva6ouaugqcc8292和浏览器警报(getCookie('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb

2
Plus1-用于回答以下问题:“ ...存储在客户端还是服务器上?”
亚历克斯·瓦尔加斯

22

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


18

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


13

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


12

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


1
谢谢,这就是我想要的。是的,如果它们不在通常的位置,我需要打开INI,但我只是想知道“嘿,通常将会话存储在哪里?” / var / lib / php / sessions /是的。
埃里克·L.

7

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



0

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

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

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


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.