会话保存在哪里?
Posted
技术标签:
【中文标题】会话保存在哪里?【英文标题】:where does session save? 【发布时间】:2011-08-01 09:22:19 【问题描述】:我想知道 php 会话数据保存在哪里;它在客户端浏览器中吗?还是在服务器上?
当我在浏览器设置中禁用 cookie 时,PHP 无法保存会话数据,但在 php.ini
中,我可以更改会话保存路径。
会话数据是存储在服务器还是客户端浏览器上?
【问题讨论】:
【参考方案1】:您使用$_SESSION
读写的会话数据 存储在服务器端,通常存储在临时目录中的文本文件中。无法从外部访问它们。
将会话连接到客户端浏览器的是会话ID,它通常存储在 cookie 中(有关该规则的例外情况,请参阅 cmets)。此 ID 是并且应该是唯一存储在客户端的会话。
如果您在浏览器中删除 cookie,则与该会话的连接将丢失,即使服务器上的文件继续存在一段时间。
session.save_path
变量影响服务器上存储会话数据的位置。如果您不是服务器的管理员,通常不需要更改它。
【讨论】:
如果禁用 cookie,会话 ID 将附加到所有页面请求。 @Martijn 这不是会话的默认行为。这需要在你身边完成更多的代码工作 正确,如果 cookie 不可用,会话 ID 将通过 URL 和隐藏表单输入传递。这是由 PHP 自动处理的。见php.net/manual/en/session.idpassing.php @Shakti 不一定。session.use_trans_sid
重写您的 html 输出以自动添加会话 ID。它并不总是有效,例如使用 javascript。
@Shakti Singh 请阅读我的评论和我提供的 URL,大部分工作由 PHP 完成。【参考方案2】:
两者都有!会话将实际会话信息保存在服务器上,但给客户端一个标识cookie,以知道哪个会话属于哪个客户端。 cookie 本身中的信息是没有价值的,但是允许服务器识别客户端并使用实际的会话信息。
【讨论】:
所以不是两者兼而有之。只是一个帮助我们知道会话属于谁的 id 并不一定意味着会话存储在客户端和服务器端。所以不是两者都是,而是在服务器上,而是在cookie中存储了一个唯一的ID,而cookie存储在客户端。【参考方案3】:Blockquote“会话数据是存储在服务器还是客户端浏览器上?”
这让我想到了代客泊车系统。代客(服务器)保留您的汽车(会话数据),但他/她会给您一张票(会话 id),以证明当您需要访问汽车时,它是您的。如果您丢失了您的车票(通过删除缓存或关闭浏览器),您的汽车(会话数据)就像消失了一样,因为您无法再证明它是您的汽车。
好吧,这只是一个类比......很快就会崩溃。例如。您实际上并不像拥有您的汽车那样拥有您的会话信息。而且你不能把它赶走。
【讨论】:
【参考方案4】:两者,客户端(浏览器)中的会话保存为 cookie。该 cookie 引用了同样驻留在服务器上的会话。
【讨论】:
不再是两者。会话和 Cookie 是不同的。我们不应该两者都说。存储在 cookie 中的 ID 不会突然使 cookie 成为会话。【参考方案5】:存储在服务器端,维护安全;但额外的 cookie 也可以存储在客户端。
【讨论】:
以上是关于会话保存在哪里?的主要内容,如果未能解决你的问题,请参考以下文章