Neden benim php komut session_start () kullanamıyorum?

2 Cevap php

İşte benim sayfanın ilk birkaç satır:

<!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;}
?>

Ben şu hatayı alıyorum:

On line 2 / usr / www / users / simpleof / index.php: - oturum çerezi göndermek olamaz zaten tarafından gönderilen başlıklar (2 çıkış / usr / www / users / simpleof / index.php başladı)

Ben diğer forumlarda okuduğum kadarıyla, session_start () php kod ilk bloğunda olduğundan bu ince olmalıdır, ama ben yine de bu hatayı alıyorum.

2 Cevap

Siz yanlış yorumlamak ya da diğer forumlarda yanlış. session_start() PHP kodunun ilk "blok" olarak sırf bu iş olacak anlamına gelmez.

session_start() başlıkları gönderilmeden önce çalıştırılması gerekiyor.

Durumda da çözüm:

session_start(); üzerinde hareket <!DOCTYPE html ...

İşte HTTP protokolü nasıl çalışıyor:

Eğer tarayıcı ile başlığının bu tür gönderin:

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

Öncelikle sunucu başlıklarını gönderir:

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

Ardından sunucu, gerçek sayfa veri gönderir

<!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..

Yani başlık zaten işlenir çünkü İLK sonra başlık verilerini HTML verileri (DOCTYPE) gönderebilir ve veremiyorum. Sen PHP'nin Output Control etrafında gidebilirsiniz ama daha önerilen kullanım son gördüğü tüm verileri tampon nerede MVC tasarımı kullanmaktır.