簡體   English   中英

為什么我不能在php腳本中使用session_start()? 它說標題已經發送

[英]Why can't I use session_start() in my php script? It says headers are already sent

以下是我頁面的前幾行:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php include_once "dblogin.php";
session_start();
$loggedIn = 0;
if(isset($_SESSION["login"])) {$loggedIn = 1;}
?>

我收到以下錯誤:

無法發送會話cookie - 已在第2行的/usr/www/users/simpleof/index.php中發送的輸出(輸出在/usr/www/users/simpleof/index.php:2處開始)

從我在其他論壇上看到的,這應該沒問題,因為session_start()在php代碼的第一個塊中,但我仍然收到此錯誤。

以下是HTTP協議的工作原理:

您通過瀏覽器發送此類標題:

GET /questions/712326/why-cant-i-use-sessionstart-in-my-php-script-it-says-headers-are-already-sen HTTP/1.1
Host: stackoverflow.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fi; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fi-fi,fi;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://stackoverflow.com/questions/tagged/php
Cookie: *censored*
Cache-Control: max-age=0

第一台服務器發送標頭:

HTTP/1.x 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Fri, 03 Apr 2009 02:14:49 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
Set-Cookie: *censored*
Date: Fri, 03 Apr 2009 02:14:49 GMT
Content-Length: 9346

然后服務器會向您發送實際的頁面數據

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
<head>    

    <title>Why can't I use session_start() in my php script? It says headers are already sent. - Stack Overflow</title>
    <link rel="stylesheet" href="/Content/all.min.css?v=2743">
   ..snip..

所以你看到你不能首先發送HTML數據(DOCTYPE)然后標題數據,因為標題已經被處理。 您可以使用PHP的輸出控件,但更多建議您使用MVC設計來緩沖用戶最后看到的所有數據。

你誤讀或其他論壇是錯誤的。 僅僅因為session_start()位於PHP代碼的第一個“塊”中並不意味着它將起作用。

session_start()需要在發送標頭之前運行。

您的案例中的解決方案是:

移動session_start(); 上面<!DOCTYPE html ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM