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

时间:2016-02-09 07:30:59

标签: php

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

我有两个php文件。 1. head.php 2. body.php

head.php

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

body.php

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

这是对的吗?或者我是否也需要在 body.php 文件中添加session_start();

2 个答案:

答案 0 :(得分:4)

<强> TL; DR

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

哦,它是$_SESSION,而不是$_Session

  

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

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

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

  

请详细说明我不明白

在调用echo之前,不要session_start()或打印等任何内容,甚至不要在PHP标记之外。不要在PHP标记之前放置任何html或空格。在调用该函数之前,绝对不应该向浏览器发送任何内容。

错误使用

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

正确用法

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

答案 1 :(得分:1)

此外,如果您将head.php包含在许多php文件中,则应先检查会话,然后再启动会话。否则你会收到错误。

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

您当前的代码没问题,会话开始应该在head.php本身