会话未启动。但仍然显示它已经开始的错误

时间:2013-05-14 12:57:36

标签: php session

我在index.php中包含了login.php和loggedin.php文件。

login.php和index.php都没有session_start();并且只有loggedin.php有session_start();在里面。

但是当我打开index.php时,我仍然遇到以下错误:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/content/98/10855698/html/symp13/index.php:110) in /home/content/98/10855698/html/symp13/loggedin.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/98/10855698/html/symp13/index.php:110) in /home/content/98/10855698/html/symp13/loggedin.php on line 2

loggedin.php如下:

<?php
session_start();
if (isset($_SESSION['username'])) {
echo 'you are logged in as'.' '.$_SESSION["username"];
echo '<form action="upload.php" method="post" enctype="multipart/form-data" name="upload">'.'<input type="file" name="file" /><input type="submit" name="submit" />'.'</form>'; }
else {
echo 'You need to login in with your account for submitting abstract or for applying for tutorials!';
echo 'Click here to'.' '.'<a href="login.php">login</a>';
}
?>

login.php包含一个操作设置为login_check.php的表单,其中包含session_start();.但我不认为这是问题。因为,在提交表单之前无法运行。

如果我只在一个单独的文件中运行loggedin.php。它没有显示错误。

我很困惑。请告诉我如何解决这个问题以及原因。

enter image description here

2 个答案:

答案 0 :(得分:2)

正如the documentation所说:

  

要使用基于cookie的会话,必须先调用session_start()   向浏览器输出任何内容。

这意味着在调用session_start()之前必须有 no whitespace ,甚至是空白。因此,index.php文件必须如下所示:

<?php

  include 'loggedin.php'; //containing session start
  include 'login.php';

  echo 'other output';
?>
more output here

答案 1 :(得分:1)

把你的:

<?php ... ?>

在一切之上(身体上方)。它不会破坏任何东西。然后根据需要使用CSS定位。