定义常量后的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()应该是第一件事,在任何事情之前。

这种说法基本上是错误的。

初始化会话时需要考虑以下几点:

  1. 使用默认(和推荐)设置,会话 ID 通过 cookie 传输。服务器端 cookie 是通过 HTTP 标头设置的。HTTP 标头需要在响应正文之前发送。因此,您需要避免这样的构造:

    echo 'Hello, World!';
    session_start();
    
  2. 在从持久存储中检索会话数据之前,您不能使用它。这正是session_start()它的作用。所以你不能这样做:

    $user_name = $_SESSION['user_name'];
    session_start();
    
  3. 有时您可能想要关闭会话以解锁存储。你用session_write_close(). 一旦你这样做了,会话数据会保持加载状态,但更改不会持续存在。所以请避免:

    session_write_close();
    $_SESSION['user_name'] = 'john.doe';
    

除此之外,您可以随时开始会议。


以上是定义常量后的Session_start()的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>