为什么这种组合使用cookie和会话有效?困惑

时间:2011-08-31 16:20:33

标签: php session cookies

我很困惑为什么这有效;

setcookie("user", $user_id, time()+604800);
session_start();
$_SESSION['user_id'] = "string";

即使setcookie()不包含对$_SESSION['user_id']的引用,但当我使用代码从其他页面回显$_SESSION['user_id']时:

session_start();
echo $_SESSION['user_id'];

打印string

我认为setcookie()必须引用$_SESSION密钥以便从任何页面调用它?

也许我的基础不错,但我只是想确保在实施之前我理解为什么这样做,因为我不想因为使用不当而导致错误。

任何帮助,意见,建议和解释都将不胜感激!

3 个答案:

答案 0 :(得分:0)

只有会话ID 存储在Cookie中;用于将来自同一用户的多个请求链接为一个会话。在从客户端发送请求时,来自cookie的会话ID在请求中发送,并且服务器使用该id来标识客户端并检索会话的内容。存储在会话中的实际变量存储在服务器上。

答案 1 :(得分:0)

Cookie和会话是两个完全不同的系统。

PHP的会话确实在cookie中使用唯一的会话ID来跟踪会话,但是任何其他cookie都不会影响它,并且会话不会存储在cookie中(它们存储在服务器端的内存或文件中,具体取决于你的php配置)。

session_start()创建该唯一会话ID并将其存储在cookie中。

$ _ SESSION ['user_id'] ='string'在服务器端设置变量。

在下一页刷新时,它会从唯一会话ID中获取会话,并使用其他请求中设置的所有内容填充$ _SESSION变量。

答案 2 :(得分:0)

setcookie()向浏览器发送通用Cookie,而session_start()初始化会话将会话Cookie发送到浏览器。使用setcookie(),您可以在Cookie中发送您想要的任何内容,例如用户在访问之间记住的用户名和密码,或任意文本。请注意,所有这些都存储在cookie本身中,并且可以由用户操纵,因此不应该被信任。

另一方面,使用session_start(),一切都在服务器端处理。 cookie中发送的唯一内容是会话标识符。浏览器无法直接操作会话数据。 PHP还处理防冲突,数据存​​储(默认情况下是纯文本文件只能由root查看并存储在/ tmp中)和到期(即使cookie由浏览器操纵。)

基本上,即使这些功能相似,它们都会向浏览器发送cookie,但它们的用途完全不同。