2011-04-08 122 views
34

我想知道PHP会话数据保存在哪里;它在客户端浏览器中吗?或在服务器上?会话保存在哪里?

当我在浏览器设置中禁用cookie时,PHP无法保存会话数据,但在php.ini中,我可以更改会话保存路径。

会话数据存储在服务器或客户端浏览器上吗?

回答

73

会话数据您使用$_SESSION读写的内容存储在服务器端,通常是临时目录中的文本文件。他们不能从外面访问。

将会话连接到客户端浏览器的事件是会话ID,它通常存储在cookie中(请参阅注释以了解该规则的例外情况)。这个ID是并且应该是关于你的会话存储在客户端的唯一信息。

如果删除浏览器中的cookie,即使服务器上的文件在一段时间内仍然存在,与该会话的连接也会丢失。

session.save_path变量影响存储会话数据的服务器上的位置。如果您不是服务器的管理员,通常不需要更改它。

+5

如果禁用了cookie,会话ID将附加到所有页面请求。 – Martijn 2011-04-08 09:54:13

+2

@Martijn这不是会话的默认行为。这需要更多的代码东西在你身边 – 2011-04-08 09:56:27

+1

正确,如果cookie不可用,会话ID将通过URL和隐藏表单输入传递。这由PHP自动处理。见http://www.php.net/manual/en/session.idpassing.php – Capsule 2011-04-08 09:56:33

4

两者,客户端(浏览器)中的会话都保存为cookie。此cookie引用也位于服务器上的会话。

10

这是两个!会话将实际会话信息保存在服务器上,但会向客户端提供一个识别cookie,以了解哪个会话属于哪个客户端。 cookie本身的信息毫无价值,但允许服务器识别客户端并使用实际的会话信息。

1

它存储在服务器端以保持安全;但额外的cookies也可以存储在客户端。

1

Blockquote“会话数据存储在服务器还是客户端浏览器?”

这让我想起一个代客停车系统。代客(服务器)保存你的车(会话数据),但他/她给你一张票(会话ID)挂在上面证明,当你需要访问它时,车是你的。如果您失去了票据(通过删除缓存或关闭浏览器),您的汽车(会话数据)就像已经消失,因为您无法再证明它是您的汽车。

好吧,这只是一个比喻......并迅速崩溃。例如。你实际上并不拥有自己的会话信息,比如你做你的车。你不会把它赶走。