定义常量后的Session_start()
在每一页(第一行,第一个代码)上,我都有这两行代码:
define("DIRECT_ACCESS", true);
defined("DIRECT_ACCESS") OR die(header("Location: https://website.com/"));
在这两行代码之后,我总是做 session_start();,我读到 session_start() 应该作为第一件事,在任何事情之前。Session_status() 显示会话处于活动状态并且工作正常,所以我有几个问题:
1.如果会话应该在第一行,在其他代码之前,为什么它会工作?
2. 有没有什么危险的事情会发生,如果我不把 session_start() 作为第一行代码,以后会停止工作吗?
感谢您花时间帮助我。
回答
我读到
session_start()应该是第一件事,在任何事情之前。
这种说法基本上是错误的。
初始化会话时需要考虑以下几点:
-
使用默认(和推荐)设置,会话 ID 通过 cookie 传输。服务器端 cookie 是通过 HTTP 标头设置的。HTTP 标头需要在响应正文之前发送。因此,您需要避免这样的构造:
echo 'Hello, World!'; session_start(); -
在从持久存储中检索会话数据之前,您不能使用它。这正是
session_start()它的作用。所以你不能这样做:$user_name = $_SESSION['user_name']; session_start(); -
有时您可能想要关闭会话以解锁存储。你用
session_write_close(). 一旦你这样做了,会话数据会保持加载状态,但更改不会持续存在。所以请避免:session_write_close(); $_SESSION['user_name'] = 'john.doe';
除此之外,您可以随时开始会议。