Avatar billede jcn Nybegynder
14. juni 2004 - 14:37 Der er 4 kommentarer og
1 løsning

Problemer med "session_start"

Hej

Jeg har problemer med at bruge session's

kode:
session_start(); // start session

$_SESSION['name'] = 'Per';

fejl:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\apache\htdocs\smdfeeder\index.php:13) in c:\apache\htdocs\smdfeeder\index.php on line 67

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\apache\htdocs\smdfeeder\index.php:13) in c:\apache\htdocs\smdfeeder\index.php on line 67

Hvad er der galt?
Avatar billede jaw Nybegynder
14. juni 2004 - 14:38 #1
Kører du noget HTML-kode inden du bruger session_start(); ?
Avatar billede jcn Nybegynder
14. juni 2004 - 14:46 #2
ja


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
        <meta name="generator" content="Adobe GoLive 6">
        <title>SMD feeder fejlmelding!</title>
    </head>

    <body bgcolor="#ffffff">
    <?
Avatar billede whistler Nybegynder
14. juni 2004 - 14:47 #3
Enten har du udlæst noget _med vilje_ til browseren inden du kalder session_start(); eller også har du en (fx) include-fil der indeholder et blankt linieskift i toppen/bunden som er blevet udlæst til skærmen uden du har tænkt over det.

Så hvis 1) du har udlæst noget til skærmen/browseren inden du kalder session_start() så lad være med det eller 2) check alle de filer du inkluderer inden du kalder session_start() for tomme linier uden for <?php ?> delen af filerne.

//Geert
Avatar billede jaw Nybegynder
14. juni 2004 - 14:48 #4
Så lav:
<? session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>
osv.osv.osv.

og fjern din session_start det andet sted i dit dokument
Avatar billede fangel Nybegynder
14. juni 2004 - 18:14 #5
*teknisk forklaring*
session_start sender en header (i dette tilfælde en cookie, som faktisk er en header)... http-protokollen (den måde browser og server snakker sammen på) er opbygget så alt skal modtages i denne order

----
evt header1\r\n
evt header3\r\n
[etc]
\r\n
html-indhold\r\n
---
\r\n = carriage return, new line = linieskift på 'maskinsk'

Det du lavede fejl var at du sendte noget html før headers - og da dette er imod http-protokollen annulere php header-kaldet og laver en Warning... det er derfor nødvendigt at omstrukturer scriptet så alle header-kald kommer før noget som helst output...

Der findes også en anden løsning, men den bør altid undgås (kun ved samenkobling til eget error-reporting system / cache / andet der kunne drage nytte af det)...
Det kaldes output-buffering (OB)... Det php gør hvis OB er sat til er at gemme alt output i en variabel som så udskrives ved enden af scriptet - dette sikre at der intet output kommer før header-kald...
MEN, dette kræver selvfølgeligt en del ekstra af serveren - så det bør, og kan næsten altid, undgås...

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester