[php] cookies sessions en header error

Pagina: 1
Acties:

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Ik zit met een probleem. Ik ben bezig met een website met een Users gedeeltje, beveiligt met cookies en sessions.
De sessies worden verwijdert als het venster sluit.. Daarom is er dus een cookie, die de sessie moet activeren als de site weer geopend wordt. In de MySQL wordt de cookieid en ip, userid etc.. netjes opgeslagen om daarna weer teruggehaald te worden als sessie.

Nu krijg ik de volgende error
code:
1
2
[Mon Mar 11 22:02:48 2002] [error] PHP Warning:  Cannot add header information - headers already sent by (output started at c:\program files\apache group\apache\htdocs\mvn\mvnconfig\auth.inc.php:146) in c:\program files\apache group\apache\htdocs\mvn\mvnconfig\auth.inc.php on line 70
[Mon Mar 11 22:02:48 2002] [error] PHP Warning:  Cannot add header information - headers already sent by (output started at c:\program files\apache group\apache\htdocs\mvn\mvnconfig\auth.inc.php:146) in c:\program files\apache group\apache\htdocs\mvn\mvnconfig\auth.inc.php on line 71

Dit include filetje bevat de functions die ik gebruik. auth.inc.php
Er worden als het goed is denk ik geen headers verzonden op deze manier, correct me if i'm wrong?
PHP:
1
<?Function CheckLogin(){ If ($HTTP_SESSION_VARS["Login_Done"] == "1"){  return 1;  } ElseIF ($HTTP_COOKIE_VARS["cookie[1]"]) {   return setsessie(); } Else {   return 0;   }}Function setsessie(){ $Cookie_CookieID = addslashes($HTTP_COOKIE_VARS["cookie[1]"]); $Cookie_UserID = addslashes($HTTP_COOKIE_VARS["cookie[2]"]); $Query_auth = mysql_query("SELECT Geldig, Last_Accessed FROM auth WHERE CookieID = '$Cookie_CookieID' AND UserID = '$Cookie_UserID'"); If (mysql_num_rows($Query_auth) == 1){  $Query_auth_Array = mysql_fetch_array($Query_auth);  $Geldig = $Query_auth_Array["Geldig"];  $Last_Accessed = $Query_auth_Array["Last_Accessed"];  $Ip_adres = $Query_auth_Array["Ip_adres"];  global $REMOTE_ADDR;  $Tijd = time();  If ($Geldig == "1"){    $Tijd_Geldig = 24*60*60;   }  If ($Geldig == "2"){    $Tijd_Geldig = 7*24*60*60;   }  If ($Geldig == "3"){    $Tijd_Geldig = 4*7*24*60*60;   }  $Tijd_Geldig_Max = $Last_Accessed + $Tijd_Geldig;  If (($Tijd_Geldig_Max > $Tijd) AND ($REMOTE_ADDR == $Ip_adres)){    $Login_Done = "1";    $Ip_Adres = $REMOTE_ADDR;    $CookieID = $Cookie_CookieID;    $UserID = $Cookie_UserID;    session_register("Login_Done");    session_register("Ip_Adres");    session_register("CookieID");    session_register("UserID");//    $HTTP_SESSION_VARS["Login_Done"] = 1;//    $HTTP_SESSION_VARS["Ip_Adres"] = $REMOTE_ADDR;//    $HTTP_SESSION_VARS["CookieID"] = $Cookie_CookieID;//    $HTTP_SESSION_VARS["UserID"] = $Cookie_UserID;    return 1;  }  Else {   return 0;  } } Else {  return 0; }}Function LoginUser($username, $password, $cookie_levensduur){ $username = addslashes($username); $password = addslashes($password); $cookie_levensduur = addslashes( $cookie_levensduur); $Query_Users = mysql_query("SELECT UserID, Active FROM users WHERE UserName = '$username' AND UserPassword = '$password'");   If (mysql_num_rows($Query_Users) == 1){  $Query_Users_Array = mysql_fetch_array($Query_Users);   If ($Query_Users_Array["Active"]){    global $REMOTE_ADDR;    $Tijd = time();    $Cookie_inhoud[1] = RandomCookieID();    $Cookie_inhoud[2] = $Query_Users_Array["UserID"];    If ($cookie_levensduur == "01"){      setcookie ("cookie[1]", $Cookie_inhoud[1]); // regel 70      setcookie ("cookie[2]", $Cookie_inhoud[2]); // regel 71      mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud[1]', '$Cookie_inhoud[2]', '1', '$REMOTE_ADDR', '$Tijd')");               }    ElseIF ($cookie_levensduur == "02"){      setcookie ("cookie[1]", $Cookie_inhoud[1]);      setcookie ("cookie[2]", $Cookie_inhoud[2]);      mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud[1]', '$Cookie_inhoud[2]', '2', '$REMOTE_ADDR', '$Tijd')");                     }    ElseIF ($cookie_levensduur == "03"){      setcookie ("cookie[1]", $Cookie_inhoud[1]);      setcookie ("cookie[2]", $Cookie_inhoud[2]);      mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud[1]', '$Cookie_inhoud[2]', '3', '$REMOTE_ADDR', '$Tijd')");                      }    $Login_Done = "1";    $Ip_Adres = $REMOTE_ADDR;    $CookieID = $Cookie_inhoud[1];    $UserID = $Cookie_inhoud[2];    session_register("Login_Done");    session_register("Ip_Adres");    session_register("CookieID");    session_register("UserID");//    $Login_Done = "1";//    session_register("Login_Done");//    session_register("REMOTE_ADDR");//    session_register("Cookie_inhoud[1]");//    session_register("Cookie_inhoud[2]");//    $HTTP_SESSION_VARS["Login_Done"] = 1;//    $HTTP_SESSION_VARS["Ip_Adres"] = $REMOTE_ADDR;//    $HTTP_SESSION_VARS["CookieID"] = $Cookie_inhoud[1];//    $HTTP_SESSION_VARS["UserID"] = $Cookie_inhoud[2];    return 1;   }   Else {    return "U heeft dit Useraccount nog niet geactiveerd, wacht op uw emailtje";   } } Else {  return "De Ingevoerde gegevens zijn niet bekend in de database, de user bestaat niet"; }}Function RandomCookieID(){ $pw_length = 10; $lower_ascii_bound = 50; // "2" $upper_ascii_bound = 122; // "z"  // Exclude special characters and some confusing alphanumerics  // o,O,0,I,1,l etc  $notuse = array (58,59,60,61,62,63,64,73,79,91,92,93,94,95,96,108,111);  while ($i < $pw_length) {   mt_srand ((double)microtime() * 1000000);   // random limits within ASCII table   $randnum = mt_rand ($lower_ascii_bound, $upper_ascii_bound);   if (!in_array ($randnum, $notuse)) {    $password = $password . chr($randnum);    $i++;   }  }  return $password; }?>

Hieronder is het inlog script, met headers. En volgens mij zijn er ook hier geen headers verzonden voordat er de functie uit auth.inc.php is aangeroepen.
PHP:
1
<?session_start();include ("../mvnconfig/common.inc.php");include ("../mvnconfig/auth.inc.php");connecttodatabase();$Headers_geweest = 0;If (!CheckLogin()){ $Naam = addslashes($Naam); $Passwoord = addslashes($Passwoord); $Cookie_Levensduur = addslashes($Cookie_Levensduur); If ($Login){   $Message = LoginUser($Naam, $Passwoord, $Cookie_Levensduur);   If ($Message == 1){    $completed = 1;   } } If (!$completed){  $Headers_geweest = 1;?> <html> <head> <title>Inloggen User</title> </head> <body>  <form method="POST" action="Test.php?Login=1"> <div align="center"> <center> <table border="1" width="400" cellspacing="1" bordercolorlight="#000000" height="172"> <tr>   <td width="100%" colspan="2" height="19" valign="top">     <p align="center">Inloggen User</td>   </tr>   <tr>     <td width="50%" height="19" valign="top">Username</td>     <td width="50%" height="19" valign="top"><input type="text" name="Naam" size="20" value="<?php echo $Naam ?>"></td>   </tr>   <tr>     <td width="50%" height="19" valign="top">Password</td>     <td width="50%" height="19" valign="top"><input type="password" name="Passwoord" size="20" value="<?php echo $Passwoord ?>"></td>   </tr>   <tr>     <td width="50%" height="73" rowspan="4" valign="top">Levensduur Cookie</td>     <td width="50%" height="19" valign="top">     <p><input type="radio" value="0" name="Cookie_Levensduur">Geen Cookie</p>     </td>   </tr>   <tr>     <td width="50%" height="19" valign="top"><input type="radio" value="01" checked name="Cookie_Levensduur">1 dag</td>   </tr>   <tr>     <td width="50%" height="16" valign="top"><input type="radio" value="02" name="Cookie_Levensduur">1 week</td>   </tr>   <tr>     <td idth="50%" height="19" valign="top"><input type="radio" value="03" name="Cookie_Levensduur">1 maand</td>   </tr> </table> </center> </div> <p align="center"> <input type="submit" value="Inloggen" name="Inloggen"> </form><?php  echo $error;  echo $Message; } }If (CheckLogin()){ If (!$Headers_geweest){?> <html> <head> <title>Overzicht Sessie's van de User</title> </head> <body><?php }?>  <table border="1" width="100%" bordercolordark="#000000" cellpadding="0" bordercolorlight="#000000">  <tr>   <td width="20%" align="center" valign="top">SessieID</td>   <td width="20%" align="center" valign="top">User</td>   <td width="20%" align="center" valign="top">Ip - adres</td>   <td width="20%" align="center" valign="top">CookieCode</td>   <td width="20%" align="center" valign="top">Verloopt Op</td>  </tr>  <tr>   <td width="20%" align="left" valign="top">&amp;nbsp;</td>   <td width="20%" align="left" valign="top">&amp;nbsp;</td>   <td width="20%" align="left" valign="top">&amp;nbsp;</td>   <td width="20%" align="left" valign="top">&amp;nbsp;</td>   <td width="20%" align="left" valign="top">&amp;nbsp;</td>  </tr> </table><?php}?></body></html>?>

Wie zit dit anders dan mij en weet wel wat er fout is? Questions welcome

  • Grum
  • Registratie: Juni 2001
  • Niet online
heel simpel

der mag geen BIT worden uitgepoept VOOR je je headers zet

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

heropend
verwijzen naar www.php.net/header heeft de oplossing niet gebracht :)

Doet iets met Cloud (MS/IBM)


Verwijderd

en met error_reporting(E_ALL) aan?

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op maandag 11 maart 2002 22:48 schreef zellufs het volgende:
en met error_reporting(E_ALL) aan?
Uhmm... effe kijken hoe ie nu staat in mijn
php configuratie.

error_reporting=E_ALL & ~E_NOTICE // zo dus

Verwijderd

en wat staat er dan precies op die lines waar die die error aangeeft?

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Voor alle duidelijkheid.. ik heb mijn werk secure gedaan. ik heb kleinere projectjes met sessies en cookies appart gedaan, waarvan de headers nooit probleem zijn geweest. Ik heb de documentatie dit weekend uitgeprint en helemaal doorgenomen.
Ik heb wat testjes gedaan of de mysql queries wel goed zaten, en dat was zo. Ik heb daarna gelijk
die(mysql_error()); weggehaalt.
Ik kan me begrijpen dat jullie denken van huppa hier is er weer 1 die niet verder dan zijn neus kijkt, maar dat is hier echt niet het geval. Wie heeft de misschien toch wat simpele oplossing, en ben ik zo dom om er niet achter te komen (want ieder mens maakt een fout) en het is moeilijk om je eigen fouten te ontdekken.
Ik ga een testje die ik van D2K als tip kreeg nog doen, maar daarover morgen meer.

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op maandag 11 maart 2002 22:57 schreef zellufs het volgende:
en wat staat er dan precies op die lines waar die die error aangeeft?
het is een lange pagina, dus ik copy het kleine stukje uit auth.inc.php nog een keertje
PHP:
1
<?If ($cookie_levensduur == "01"){setcookie ("cookie[1]", $Cookie_inhoud[1]); // regel 70      setcookie ("cookie[2]", $Cookie_inhoud[2]); // regel 71      mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud[1]', '$Cookie_inhoud[2]', '1', '$REMOTE_ADDR', '$Tijd')");               }?>

Verwijderd

ja, en regel 146? want daar start de output :)

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op maandag 11 maart 2002 23:00 schreef zellufs het volgende:
ja, en regel 146? want daar start de output :)
hee klote.. eind van het script na de ?> tags.. effe kijken of ie nu wel werkt
(sorry D2k Als je toch gelijk hebt)

Verwijderd

dat moet het gewoon zijn, een spatie, of een return ofzo...

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
maar nu is die error weg.. maar de sessie bevat niks.

!Login_Done|!Ip_Adres|!CookieID|!UserID|

Heeft dit te maken dat de variabelen niet global zijn?

Verwijderd

Ook er effe op letten dat er nergens (in het begin bijvoorbeeld, heb ik mezelf ooit ziek naar gezocht) blank lines zijn. Dit is namelijk ook output...

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op maandag 11 maart 2002 23:05 schreef Zagato het volgende:
Ook er effe op letten dat er nergens (in het begin bijvoorbeeld, heb ik mezelf ooit ziek naar gezocht) blank lines zijn. Dit is namelijk ook output...
Yep, ik heb toen alles afgezocht, maar wie let er nu op ?> aan het end van auth.inc.php heb ik daar me hele weekend voor achter mijn computer gezeten.. *zucht* wat ben ik dom

Verwijderd

http://php.net/session-register
Caution
This registers a global variable. If you want to register a session variable inside a function, you need to make sure to make it global using global() or use the session arrays as noted below.

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Yep.. dat van die global was ik me bewust. Ik heb me dus vergist in die ?> en die 2 spaties erna. :(
Ik d8 dat door die headers error, mijn script kapte. maar dat is dus niet het geval, dus ik kan nu gewoon verder. thx

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Toch klopt er nog meer niet aan mijn script. Cookies zie ik nog niet verschijnen, terwijl ik dacht dat dit wel zou moeten werken nu. Ook de sessies blijven leeg, dus ook als ik Global gebruik, zoals beschreven bij php.net/session-register.
PHP:
1
<?    session_register("Login_Done");    $GLOBALS['Login_Done'] = $Login_Done;    session_register("Ip_Adres");    $GLOBALS['Ip_Adres'] = $Ip_Adres;    session_register("CookieID");    $GLOBALS['CookieID'] = $CookieID;    session_register("UserID");    $GLOBALS['UserID'] = $UserID;?>

Zo heb ik dus de Vars Global gemaakt, en precies zoals staat beschreven in php.net/session-register. Iemand een idee?

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Bij php.net/session-register staat onderandere dat als je session_register gebruikt, je geen http_session_vars moet gebruiken
If you are using $HTTP_SESSION_VARS/$_SESSION, do not use session_register(), session_is_registered() and session_unregister().
Maar wat dan. Uitlezen als $Login_Done werkt niet. Zou je daarvoor dan ook $GLOBALS['Login_Done'] moeten gebruiken?

Overigens werkte onderstaande wel, moest mijn server ervoor restarten, raar eigenlijk.
PHP:
1
<?      session_register("Login_Done");      $GLOBALS['Login_Done'] = $Login_Done;      session_register("Ip_Adres");      $GLOBALS['Ip_Adres'] = $Ip_Adres;      session_register("CookieID");      $GLOBALS['CookieID'] = $CookieID;      session_register("UserID");      $GLOBALS['UserID'] = $UserID;?>

De sessie ziet er dus uiteindelijk zo uit:
code:
1
Login_Done|s:1:"1";Ip_Adres|s:11:"192.168.1.2";CookieID|s:10:"AB7tYx9gTW";UserID|s:1:"1";

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Hopelijk komt dit niet vaak voor, dat er geen reacties zijn :P

De cookies en sessies werken nu.. :)
maaar.......

De aanwezigheid van een cookie controleren? Ik doe het eerst wel effe in dit topic, want het zal simpel zijn, maar ik heb het nog niet op deze grote schaal toegepast.

Ik doe dus nu
PHP:
1
<?Function CheckLogin(){If ($GLOBALS['Login_Done'] == "1"){  return 1;  } ElseIF ($HTTP_COOKIE_VARS["cookie[1]"]) {   return setsessie(); } Else {   return 0;   }}?>

Maar ja, dan sluit ik mijn venster, en later ga ik weer naar test.php, krijg ik dus nog geen authorisatie mee.. Why, hij probeert nu toch de cookie op de computer van de bezoeker te lezen? Of vergeet ik iets?

  • Grum
  • Registratie: Juni 2001
  • Niet online
gebruik aub niet van die enge hoofdletters in If/Elseif/Else/Function enzo dat staat echt lelijk

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op dinsdag 12 maart 2002 17:27 schreef Grum het volgende:
gebruik aub niet van die enge hoofdletters in If/Elseif/Else/Function enzo dat staat echt lelijk
YES SIR. Ik zal erop letten

Ik heb thuis een simpel windows 98 servertje ;(
Ik heb dus geen last van case sensitive :)
En ik zal mijn best doen :)
Thx

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Ik heb een test2.php filetje

$HTTP_COOKIE_VARS["cookie[1]"]
$HTTP_COOKIE_VARS["cookie[2]"]

WERKT NIET

$cookie[1]
$cookie[2]

WERKT WEL, maar dan zouden ze dus die variabele zelf kunnen intikken in de browser toch?

Ik heb bij test.php voor de zekerheid
global $HTTP_COOKIE_VARS;
neergezet.

Is het de configuratie van php of iets anders?

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
nog geen reacties :'(

ik heb nog iets

ik heb de inhoud van een functie setsessie() in een file gezet om los te testen. hierdoor kon ik de foutjes erin eruit halen, en er zat 1 foutje in, en dat was dat ik Ip_adres vergeet uit de database te halen. dus daarom werden de sessies niet aangemaakt achteraf. Maar weizig ik dit weer door naar de functie, dan werkt het nog niet. Dit komt naar mijn mening omdat de CookieAray niet Global is. Maar het global $cookie; werkt niet.

dit is dus hoe ik het getest heb:
PHP:
1
<?session_start();include ("../mvnconfig/common.inc.php");include ("../mvnconfig/auth.inc.php");connecttodatabase();?><html><head><title>Inloggen User</title></head><body><?php//echo $HTTP_COOKIE_VARS["cookie[1]"];//echo $HTTP_COOKIE_VARS["cookie[2]"]; $Cookie_CookieID = addslashes($cookie[1]); $Cookie_UserID = addslashes($cookie[2]); $Query_auth = mysql_query("SELECT Geldig, Last_Accessed, Ip_adres FROM auth WHERE CookieID = '$Cookie_CookieID' AND UserID = '$Cookie_UserID'"); If (mysql_num_rows($Query_auth) == 1){  $Query_auth_Array = mysql_fetch_array($Query_auth);  $Geldig = $Query_auth_Array["Geldig"];  $Last_Accessed = $Query_auth_Array["Last_Accessed"];  $Ip_Adres = $Query_auth_Array["Ip_adres"];  global $REMOTE_ADDR;  $Tijd = time();  If ($Geldig == "1"){    $Tijd_Geldig = 24*60*60;   }  If ($Geldig == "2"){    $Tijd_Geldig = 7*24*60*60;   }  If ($Geldig == "3"){    $Tijd_Geldig = 4*7*24*60*60;   }  $Tijd_Geldig_Max = $Last_Accessed + $Tijd_Geldig;  If (($Tijd_Geldig_Max > $Tijd) AND ($REMOTE_ADDR == $Ip_Adres)){    $Login_Done = "1";    session_register("Login_Done");    $GLOBALS['Login_Done'] = $Login_Done;    session_register("Ip_Adres");    $GLOBALS['Ip_Adres'] = $Ip_Adres;    session_register("CookieID");    $GLOBALS['CookieID'] = $Cookie_CookieID;    session_register("UserID");    $GLOBALS['UserID'] = $Cookie_UserID;    echo "goedgelukt";  }  Else {   echo "hier loopt ie vast";  } } Else {  echo "0"; }?></body></html>?>

Overigens moet ik dus nog steeds via de niet beveiligde manier de Cookie Vars gebruiken, waaorm weet ik niet.. iemand een idee?

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Overigens moet ik dus nog steeds via de niet beveiligde manier de Cookie Vars gebruiken, waaorm weet ik niet.. iemand een idee?
De $HTTP_COOKIE_VARS array is niet auto-global.. Je zult je CookieID dan moeten aanroepen met $GLOBALS['HTTP_COOKIE_VARS']['CookieID'] of $HTTP_COOKIE_VARS eerst global maken... Vanaf PHP versie >= 4.1.0 kun je de $_COOKIE array gebruiken, die is wel auto-global dus dan kun je gewoon meteen $_COOKIE['CookieID'] gebruiken..
Zie verder the fine manual :)

On track


  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Op woensdag 13 maart 2002 00:41 schreef WouZz het volgende:

[..]

De $HTTP_COOKIE_VARS array is niet auto-global.. Je zult je CookieID dan moeten aanroepen met $GLOBALS['HTTP_COOKIE_VARS']['CookieID'] of $HTTP_COOKIE_VARS eerst global maken... Vanaf PHP versie >= 4.1.0 kun je de $_COOKIE array gebruiken, die is wel auto-global dus dan kun je gewoon meteen $_COOKIE['CookieID'] gebruiken..
Zie verder the fine manual :)
Thx, maar het global maken van HTTP_COOKIE_VARS zou toch in principe al gedaan moeten worden door in test.php het volgende neer te zetten?

global $HTTP_COOKIE_VARS;

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op woensdag 13 maart 2002 09:00 schreef smaij het volgende:

[..]

Thx, maar het global maken van HTTP_COOKIE_VARS zou toch in principe al gedaan moeten worden door in test.php het volgende neer te zetten?

global $HTTP_COOKIE_VARS;
Als je dat binnen de functie doet waar je $HTTP_COOKIE_VARS aanroept wel ja :) En als wat je drie posts hierboven hebt neergezet de precieze inhoud van test.php is dan hoef je helemaal niks met global toe doen omdat je daar geen functie definieert.. Check anders voor de zekerheid ff de manual over Variable scope

On track


  • Grum
  • Registratie: Juni 2001
  • Niet online
maak aub van:
code:
1
2
3
4
$Query_auth_Array = mysql_fetch_array($Query_auth);
$Geldig = $Query_auth_Array["Geldig"];
$Last_Accessed = $Query_auth_Array["Last_Accessed"];
$Ip_Adres = $Query_auth_Array["Ip_adres"];

iets als
code:
1
list($Geldig, Last_Accessed, Ip_Adres) = mysql_fetch_row($Query_auth);

van
code:
1
2
3
4
5
6
7
8
9
If ($Geldig == "1"){
   $Tijd_Geldig = 24*60*60;
}  
If ($Geldig == "2"){
   $Tijd_Geldig = 7*24*60*60;
}
If ($Geldig == "3"){
   $Tijd_Geldig = 4*7*24*60*60;
}

iets van
code:
1
2
3
4
5
6
7
8
9
10
11
12
switch($Geldig)
{
   case 1:
         $Tijd_Geldig = 86400;
         break;   
   case 2:
         $Tijd_Geldig = 86400 * 7;
         break;    
   case 3: 
         $Tijd_Geldig = 86400 * 7 * 4; 
         break;    
}

of gebruik iig elseif's (EN HOU OP MET HOOFDLETTERS IN LANGUAGE CONSTRUCTS! :P)

schop alle globals eruit, die heb je alleen maar nodig als je OF niet kan coden OF niet kan coden (:?)

der is maar 1 variabele die je global MAG hebben (vind ik) (en dat is in php 4.0.x) $PHP_SELF. Voor de rest zou je NERGENS ook maar 1 global nodig moeten hebben ZEKER niet in php 4.1.X

dit kan ook echt niet:
code:
1
2
3
$Login_Done = "1";    
session_register("Login_Done");
$GLOBALS['Login_Done'] = $Login_Done;

je moet echt van GLOBALS afblijven (of leren coden :P - het kan nl ALTIJD netter/anders (der zijn maar 1 a 2 uitzonderingen))

Dit is voldoende:
code:
1
2
$Login_Done = "1";
session_register("Login_Done");

zij dit dan in de session in welke scope je ook zit.

Nog iets wat echt niet kan:
code:
1
global $REMOTE_ADDR;

in welke scope je ook zit haal je ZO je REMOTE_ADDR op:
code:
1
$theIP = getenv('REMOTE_ADDR');

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
dit kan ook echt niet:
code:
1
2
3
$Login_Done = "1";    
session_register("Login_Done");
$GLOBALS['Login_Done'] = $Login_Done;

je moet echt van GLOBALS afblijven (of leren coden :P - het kan nl ALTIJD netter/anders (der zijn maar 1 a 2 uitzonderingen))

Dit is voldoende:
code:
1
2
$Login_Done = "1";
session_register("Login_Done");

zij dit dan in de session in welke scope je ook zit.
Ik heb het geprobeert zonder GLOBALS, maar dit werkt niet ;(
Hoe moet ik anders de sessie registeren. Het blijkt niet te werken binnenin de functie.

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
SetCookie()'s behavior is dependant on where it is called within the web
document tree. For example, setting a cookie from a php script in a
directory makes that cookie available only to other scripts in that
directory and its subdirectories. However, setting a cookie of the same
name from a script in the directory's parent directory will override all
cookies of that name in the parent directory's subdirectories. To better
control the behavior of cookies, you might try sending a raw Set-Cookie:
header with the header() function (see Netscape's cookie spec for
information on the Set-Cookie: header).
This the problem!!!!!!!!!!!! Maar hoe los ik dit op

Ik werk met een volgende directory structuur
/mvn (Waarin dus zitten)
/mvn/mvnadmin
/mvn/mvnconfig

In mvnadmin bevonden zich de test.php en test2.php
in mvnconfig bevinden zich de include bestanden
nu worden de cookies gezet door een functie in auth.inc.php die geinclude word door test.php

Uitlezen kan dus alleen in /mvnadmin maar de include scripts staan in /mvnconfig
Hoe los ik dit op. Ik heb al geprobeert door de sessie een domein en een subdirectory mee te geven.
code:
1
2
setcookie ("cookie[1]", $Cookie_inhoud_CookieID, $Tijd + 24*60*60 ,"/mvn/", "mvn.mine.nu", 0); // regel 70
setcookie ("cookie[2]", $Cookie_inhoud_UserID, $Tijd + 24*60*60 ,"/mvn/", "mvn.mine.nu", 0); // regel 71

  • Grum
  • Registratie: Juni 2001
  • Niet online
dan set je gewoon meerdere cookies

  • Grum
  • Registratie: Juni 2001
  • Niet online
smaij: je kan me adden op icq maar NOKKEN met die ranzige Email Express zooi. Als ik der nog 1 van je krijg zorg ik der voor dat ik uit dit topic blijf.

En jah gewoon voor meerdere dirs een cookie zetten, dat kan.

probeer het voor de grap es gewoon zo:
code:
1
setcookie ("cookie[1]", $Cookie_inhoud_CookieID, $Tijd + 24*60*60);

btw ik weet niet of een constructie als "cookie[1]" ook weer een array word als dit word gelezen door php.

Verwijderd

jawel dat is zo...

  • smaij
  • Registratie: November 2000
  • Laatst online: 09:33
Om de functie setsessie() te controleren op zijn werking met cookies en om de cookieinhoud te controleren heb ik een test3.php gemaakt.. echter de output is er nog niet echt.
PHP:
1
<?session_start();include ("../mvnconfig/common.inc.php");//include ("../mvnconfig/auth.inc.php");connecttodatabase();?><html><head><title>Inloggen User</title></head><body><?php//global $HTTP_COOKIE_VARS;print_r($HTTP_COOKIE_VARS);// $Cookie_CookieID = addslashes($cookie[1]);// $Cookie_UserID = addslashes($cookie[2]);// echo $Cookie_CookieID;// echo $Cookie_UserID;// echo "<br>";//  echo $HTTP_COOKIE_VARS["cookie"][1];//  echo $HTTP_COOKIE_VARS["cookie"][2];//  echo "<br>";Function setsessie(){ $Cookie_CookieID = addslashes($HTTP_COOKIE_VARS["cookie"][1]); $Cookie_UserID = addslashes($HTTP_COOKIE_VARS["cookie"][2]); echo $Cookie_CookieID; echo $Cookie_UserID; $Query_auth = mysql_query("SELECT Geldig, Last_Accessed, Ip_adres FROM auth WHERE CookieID = '$Cookie_CookieID' AND UserID = '$Cookie_UserID'"); if (mysql_num_rows($Query_auth) == 1){  list($Geldig, $Last_Accessed, $Ip_Adres) = mysql_fetch_row($Query_auth);  $Tijd = time();  switch($Geldig){   case 1:           $Tijd_Geldig = 86400;           break;      case 2:           $Tijd_Geldig = 86400 * 7;           break;       case 3:            $Tijd_Geldig = 86400 * 7 * 4;            break;      }  $Tijd_Geldig_Max = $Last_Accessed + $Tijd_Geldig;  if (($Tijd_Geldig_Max > $Tijd) AND (getenv('REMOTE_ADDR') == $Ip_Adres)){    $Login_Done = "1";    session_register("Login_Done");    //$GLOBALS['Login_Done'] = $Login_Done;    session_register("Ip_Adres");    //$GLOBALS['Ip_Adres'] = $Ip_Adres;    $CookieID = $Cookie_CookieID;    session_register("CookieID");    //$GLOBALS['CookieID'] = $Cookie_CookieID;    $UserID = $Cookie_UserID;    session_register("UserID");    //$GLOBALS['UserID'] = $Cookie_UserID;    return 1;  }  else {   return 0;  } } else {  return 0; }}echo "<br>";echo setsessie();?></body></html>?>

zoals die nu staat met // meegenomen op de plaatsen waar ik dat gedaan heb, komt er het volgende te staan
Array ( [cookie] => Array ( [1] => k9MWCdcj68 [2] => 1 ) [PHPSESSID] => ca516300e1ef41a5374731b9ee81679c )
0
dat eerste stuk vanaf
$Cookie_CookieID = adds tot aan
echo $HTTP_COOKIE_VARS["cookie"][2];
doet het wel als je // weghaalt, effe om de output aan te geven.

Ik werk met PHP versie 4.0.6 ofzo, dus $_Cookie is nog geen optie, maar ik ga van het weekend naar die andere upgraden, maar dan moet ik effe kijken of dat zonder problemen zou kunnen lukken.

Iemand een idee hoe je dit anders zou kunnen oplossen?
Pagina: 1