我很困惑为什么这有效;
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
密钥以便从任何页面调用它?
也许我的基础不错,但我只是想确保在实施之前我理解为什么这样做,因为我不想因为使用不当而导致错误。
任何帮助,意见,建议和解释都将不胜感激!
答案 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,但它们的用途完全不同。