/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
PHP og session_start(); problem på bestemt~
Fra : M


Dato : 24-01-06 11:08

Hej!

Når jeg sidder hjemme ved min egen computer, på min dejlige alm. tdc
ADSL linie, så virker alt som det skal.

Når jeg sidder på min arbejdsplads, så går det galt. Vi sidder bag en
ISA server. Problemet forekommer også på andre pc'er. Har pt. testet
på to vidt forskellige pc'er, hvor fejlen også forekommer.

Flg. fejl:

Warning: session_start(): Cannot send session cookie - headers already
sent by (output started at
/mnt/raid/www/www/bigm/testing/login/header.inc:13) in
/mnt/raid/www/www/bigm/testing/login/login_function.inc on line 2

Warning: session_start(): Cannot send session cache limiter - headers
already sent (output started at
/mnt/raid/www/www/bigm/testing/login/header.inc:13) in
/mnt/raid/www/www/bigm/testing/login/login_function.inc on line 2

Tjek evt. selv siden:
http://www.bigm.dk/testing/login/create.php

Jeg tror problemet ligger i at session_start(); bliver kørt flere
gange. Dette er åbenbart et problem her.

Min kode ser således ud:

<?php
include("header.inc");
?>

<?php
session_start();

echo "<div id='page_center'>";
make_new_user_form();
echo "</div>";

if (isset($_POST['create'])) {
   if ((!$_POST['new_user_name'] == "") &&
(!$_POST['new_user_password'] == "") &&
(!$_POST['confirmed_new_user_password'] == "")) {
      $_SESSION['new_user'] = $_POST['new_user_name'];
      make_db_connection();
      check_if_user_exist();

         if (!$_SESSION['new_user'] ==
$_POST['new_user_name']) {
            
               echo
$_POST['new_user_password'] . " pass1<br>password> " .
$_POST['confirmed_new_user_password'] . "<br>";
            
            if ($_POST['new_user_password'] !=
$_POST['confirmed_new_user_password']) {
                  echo '<center><b><font
color="#FF0000">Passwords do not match</font></b></center><br>';
            }   else {
                  create_new_user();   
            }

      }   else {
            echo '<center><b><font
color="#FF0000">Sorry, username already
taken</font></b></center><br>';
      }
      
   } else {
      echo '<center><b><font color="#FF0000">You must fill
out all empty fields</font></b></center>';
      echo "<div id='page_center'>";
      make_new_user_form();
      echo "</div>";
      exit();
   }
}


?>

Hvad kan jeg gøre for at forhindre dette problem?

På forhånd tak!

-M

 
 
Jesper H (24-01-2006)
Kommentar
Fra : Jesper H


Dato : 24-01-06 13:03

Hej M

session_start() SKAL være det allerførste, der bliver sendt, også
før der kommer mellemrum og sådan. Der står inde på
http://uk.php.net/manual/en/function.session-start.php :
"Note: If you are using cookie-based sessions, you must call
session_start() before anything is outputted to the browser."

Øverst i din kode har du lige et par mellemrum og linieskift inden du
sender session_start():
<?php
include("header.inc");
?>

<?php
session_start();
......

Det burde virke hvis du istedet skriver:
<?php
session_start();
include("header.inc");
?>

--
Mvh Jesper, http://fdf.dk/landsdel1/


M (24-01-2006)
Kommentar
Fra : M


Dato : 24-01-06 13:34

>Hej M
>
>session_start() SKAL være det allerførste, der bliver sendt, også
>før der kommer mellemrum og sådan. Der står inde på
>http://uk.php.net/manual/en/function.session-start.php :
>"Note: If you are using cookie-based sessions, you must call
>session_start() before anything is outputted to the browser."
>
>Øverst i din kode har du lige et par mellemrum og linieskift inden du
>sender session_start():
><?php
>include("header.inc");
>?>
>
><?php
>session_start();
>.....
>
>Det burde virke hvis du istedet skriver:
><?php
>session_start();
>include("header.inc");
>?>

uuhh... Du er for sej! Super mange tak. Det løste lige en række
problemer. Underligt at det virker rigtigt hjemme ved mig selv og ikke
på min arbejdsplads!?! hmm...

Nå. Jeg har dog stadig et lille arbejdsplads problem, som jeg håber du
også kender løsningen på.

Hvis du hopper ind på:
http://www.bigm.dk/testing/login

Logger ind med:

login: admin
password: password

så får jeg flg. fejl:

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
in /mnt/raid/www/www/bigm/testing/login/login_function.inc on line 5

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
in /mnt/raid/www/www/bigm/testing/login/login_function.inc on line 6

Warning: Cannot modify header information - headers already sent by
(output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
in /mnt/raid/www/www/bigm/testing/login/login.php on line 45

De linier der refereres til er flg:

5: setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
6: setcookie("mpage", "$_SESSION[login_password_temp]", time()+60);
login.php 45: header("location: logged_in.php");

og i header.inc linie 14: <body>

Skriv hvis du skal bruge hele koden, så poster jeg den lige.

På forhånd tak!

-M

Frederik Sunne (24-01-2006)
Kommentar
Fra : Frederik Sunne


Dato : 24-01-06 13:38

M wrote:

>
> Nå. Jeg har dog stadig et lille arbejdsplads problem, som jeg håber du
> også kender løsningen på.
>
> Hvis du hopper ind på:
> http://www.bigm.dk/testing/login
>
> Logger ind med:
>
> login: admin
> password: password
>
> så får jeg flg. fejl:
>
> Warning: Cannot modify header information - headers already sent by
> (output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
> in /mnt/raid/www/www/bigm/testing/login/login_function.inc on line 5
>
> Warning: Cannot modify header information - headers already sent by
> (output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
> in /mnt/raid/www/www/bigm/testing/login/login_function.inc on line 6
>
> Warning: Cannot modify header information - headers already sent by
> (output started at /mnt/raid/www/www/bigm/testing/login/header.inc:14)
> in /mnt/raid/www/www/bigm/testing/login/login.php on line 45
>
> De linier der refereres til er flg:
>
> 5: setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
> 6: setcookie("mpage", "$_SESSION[login_password_temp]", time()+60);
> login.php 45: header("location: logged_in.php");
>
> og i header.inc linie 14: <body>
>

Jamen, det er jo fuldstændigt det samme problem. Setcookie skal ligesom
sessionstart erklæres før noget som helst bliver smidt ud i
outputbufferen. Derfor flyt setcookie FØR dine includes

Frederik

M (24-01-2006)
Kommentar
Fra : M


Dato : 24-01-06 13:50


>Jamen, det er jo fuldstændigt det samme problem. Setcookie skal ligesom
>sessionstart erklæres før noget som helst bliver smidt ud i
>outputbufferen. Derfor flyt setcookie FØR dine includes
>
>Frederik

jamen... det kan jeg jo ikke. Toppen at min login_function.inc ser
således ud:

<?php
session_start();

function make_cookie(){ // Funktion der opretter cookien!
   setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
   setcookie("mpage", "$_SESSION[login_password_temp]",
time()+60);
}

Jeg har altså lavet det som en funktion. Er det så ikke muligt?

-M

Frederik Sunne (24-01-2006)
Kommentar
Fra : Frederik Sunne


Dato : 24-01-06 14:09

M wrote:
>> Jamen, det er jo fuldstændigt det samme problem. Setcookie skal ligesom
>> sessionstart erklæres før noget som helst bliver smidt ud i
>> outputbufferen. Derfor flyt setcookie FØR dine includes
>>
>> Frederik
>
> jamen... det kan jeg jo ikke. Toppen at min login_function.inc ser
> således ud:
>
> <?php
> session_start();
>
> function make_cookie(){ // Funktion der opretter cookien!
>    setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
>    setcookie("mpage", "$_SESSION[login_password_temp]",
> time()+60);
> }
>
> Jeg har altså lavet det som en funktion. Er det så ikke muligt?
>
> -M

Hvad med:
---
<?php
session_start();
setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
setcookie("mpage", "$_SESSION[login_password_temp]",time()+60);
?>
---
og droppe dit kald til setcookie()?

/Frederik

Palle Hansen (24-01-2006)
Kommentar
Fra : Palle Hansen


Dato : 24-01-06 14:30

M wrote:

> jamen... det kan jeg jo ikke. Toppen at min login_function.inc ser
> således ud:
>
> <?php
> session_start();
>
> function make_cookie(){ // Funktion der opretter cookien!
>    setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
>    setcookie("mpage", "$_SESSION[login_password_temp]",
> time()+60);
> }
>
> Jeg har altså lavet det som en funktion. Er det så ikke muligt?

Det er ganske ligegyldigt. Det eneste som har betydning, er hvornår du i
forløbet kalder funktionen. Kalder du først funktionen efter du har
sendt data til klienten, så er det for sent.

M (24-01-2006)
Kommentar
Fra : M


Dato : 24-01-06 14:39

> Hvad med:
> ---
> <?php
> session_start();
> setcookie("mpage_u", "$_SESSION[login_user_temp]", time()+60);
> setcookie("mpage", "$_SESSION[login_password_temp]",time()+60);
> ?>
> ---
> og droppe dit kald til setcookie()?

Det fungere ikke rigtig, da det ikke er hvergang function.inc kører at
setcookie skal køres! Dvs. at setcookie skal kun køre ved login, og
ikke andet.

>Det er ganske ligegyldigt. Det eneste som har betydning, er hvornår du i
>forløbet kalder funktionen. Kalder du først funktionen efter du har
>sendt data til klienten, så er det for sent.

Vil det sige at setcookie aldrig kommer til at virke 100% ok, hvis man
laver det i en funktion? Hvad er alternativet, hvis det kun skal
fungere ved login?

Så er det jo ikke muligt at køre en setcookie i en if sætning, efter
at man at udfyldt f.eks. en form.

-M

Frederik Sunne (24-01-2006)
Kommentar
Fra : Frederik Sunne


Dato : 24-01-06 14:46
M (24-01-2006)
Kommentar
Fra : M


Dato : 24-01-06 20:24

>Læs:
>
>http://dk.php.net/manual/en/function.setcookie.php
>

Jeg kigger lige videre på det i morgen, og ser om jeg kan finde en
løsning. Evt. med hjælp fra:

http://dk.php.net/manual/en/function.ob-start.php

Mange tak!

-M

M (25-01-2006)
Kommentar
Fra : M


Dato : 25-01-06 11:19

>>Læs:
>>
>>http://dk.php.net/manual/en/function.setcookie.php
>>
>
>Jeg kigger lige videre på det i morgen, og ser om jeg kan finde en
>løsning. Evt. med hjælp fra:
>
>http://dk.php.net/manual/en/function.ob-start.php

Så.. nu ser det ud til at virke. I min login.php smed jeg i toppen
flg. kode:

<?php
   session_start();
   ob_start();
   include("header.inc");
?>

Det ser ud til at ob_start(); indsamlet alt output, og først smider
det ud til browseren, når hele koden er kørt. Så det er kanon.

Men er det den rigtige måde at gøre det på, eller findes der et bedre
alternativ?

Et andet spørgsmål er:

Skal der være en session_start(); i samme script, hvis det er en
session_destroy(); ??? Hvis jeg fjerner session_start(); får jeg
nemlig en fejl. Men det virker bare underligt, nu når jeg allerede har
lavet en session_start(); i login.php filen.

<?php
session_start();

if (isset($_GET['logout'])){
   setcookie("mpage_u", "logged_out", time() - 31536000); // SLET
COOKIE
   setcookie("mpage", "logged_out", time() - 31536000); // SLET
COOKIE
   session_destroy();
   header("location: login.php");
}
?>

Mange tak for hjælpen. Nu mangler jeg også bare at finde ud af,
hvorfor der virkede hjemme, og hjemme ved alle mulige andre, men ikke
på min arbejdsplads!

-M

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste