如果包含多个文件,则声明session_start的位置


where to declare session_start if multiple files are included?

我对php会话变量声明有疑问。

我有两个php文件。1. 头部.php 2.正文.php

头.php

session_start();
$id = $_Session['id'];
$name = $_Session['name'];
some other text like include js include css etc.

身体.php

include 'head.php';
echo $id;
echo $uid;

这是正确的吗? 还是我也需要在 body.php 文件中添加session_start();

TL;DR

在头文件中调用该函数后,无需再次调用该函数。

哦,这是$_SESSION,不是$_Session

如果包含多个文件,在哪里声明session_start?

在将任何输出发送到浏览器之前。其他都无所谓。在此之前可以有数百个PHP代码行,只要它们不发送任何输出,您可以在之后调用session_start();

显然,在那之前你不会有 SESSION 值:)

请详细说明我不明白

在调用session_start()之前,不要echo或打印任何内容,即使是在PHP标签之外。也不要在 PHP 标签之前放置任何 html 或空格。在调用该函数之前,绝对不应将任何内容发送到浏览器。

用法错误

<html>
<?php
session_start();
?>

正确用法

<?php
blahblahblah();   // or nothing
session_start();
echo "<html>";
?>

此外,如果您包括您的头部.php在许多 php 文件中,您应该先检查会话,然后再启动会话。 否则你会得到错误。

     if(session_id())
 {
      // session has been started
 }
 else
 {
      // session has NOT been started
      session_start();
 }

您当前的代码没问题,会话启动应该在头部.php本身