webForumDet fria alternativet

Sessionsvariabler funkar inte

7 svar · 221 visningar · startad av nadabalunas

nadabalunasMedlem sedan okt. 200211 inlägg
#1

Jag har ett loginscript som kortfattat ser ut så här:

//SQLkontroll av användarnamn och lösen här.
//Sql-frågan returnerar recordsetet $RecSet

Om användaren gör en lyckad inloggning vill jag sätta ett par sessionsvariabler
och sen redirecta till användarens hemsida med hjälp av javascript.

 
<?
if(användaren_existerar)
{
   session_start();
   session_register('userid');
   $userid=$RecSet["userid"]
   session_register('email');
   $email=$RecSet["email"]
   
   /*
   Jag har även provat denna variant utan resultat.
   $_SESSION['userid']=$RecSet["userid"];
   $_SESSION['email']=$RecSet["email"];
   */

   <script language="JavaScript">
   <!--
   document.location.href='<?=$_SERVER['DOCUMENT_ROOT']?>/users/index.php';
   //-->
   </script>
}
?>

Problemet är att när jag försöker att kolla sessionsvariablerna från /users/index.php så är
$_SESSION arrayen tom, eller ja nästan.
Variablerna finns när man loopar igenom arrayen, men det finns inga värden till dem.
Ex:

<?
session_start();
while (list ($key, $val) = each ($_SESSION))
{
   echo "$key = $val <br>";
}
?>

Det som skrivs ut i denna loop är bara userid='' samt email=''.
Men om jag gör om inloggningen igen så finns variablerna där...
Vad har jag gjort för fel?

QimenMedlem sedan juni 20015 009 inlägg
#2

Prova lägg $userid före session_register och sätta session_start överst på sidan.

nadabalunasMedlem sedan okt. 200211 inlägg
#3

Ingen lycka tyvärr..

Jag provade ditt förslag, men med samma resultat...

MatteMedlem sedan aug. 20002 975 inlägg
#4

Sessionsvariabler sätts ju, så det verkar inte vara något fel på själva sessionshanteringen.

Däremot verkar något strula vid tilldelningen av värde. Har du kollat att du verkligen har något värde i $RecSet ?

Testa något på det här hållet för felsökning:

<?php
if(användaren_existerar)
{
   session_start();
/*
   session_register('userid');
   $userid=$RecSet["userid"]; <-- Här saknades semikolon
   session_register('email');
   $email=$RecSet["email"]; <-- Här saknades semikolon
*/

   echo "<pre>";
   echo "\$Recset: ";
   print_r($RecSet);

   $_SESSION['userid']=$RecSet["userid"];
   $_SESSION['email']=$RecSet["email"];

   echo "\$_SESSION: ";
   print_r($_SESSION);
   echo "</pre>";

   echo "<a href='/users/index.php'>Gå till sida</a>";

   exit;

   <script language="JavaScript">
   <!--
   document.location.href='<?=$_SERVER['DOCUMENT_ROOT']?>/users/index.php';
   //-->
   </script>
}
?>

Vad får du för utfall ?

nadabalunasMedlem sedan okt. 200211 inlägg
#5

Svar till Matte:

Att jag glömt semikolon var bara en miss när jag skrev av koden.
Dessa finns i den 'skarpa' versionen.

Med hjälp av den kod du postade så visade det sig att alla variabler finns i recordsettet, samt även är korrekt tilldelade till $_SESSION.
Däremot när man redirectas till /users/index.php så är alla sessionsvariabler tomma.

Detta verkar vara helskumt...
Kan det ha något med javascriptet att göra?
Eller att man redirectar till en underkatalog där /users/-katalogen finns?

nadabalunasMedlem sedan okt. 200211 inlägg
#6

Kanske har löst problemet...

Jag hade i min loginfunktion skrivit global $_SESSION.
Detta eftersom jag behöver komma åt $_SESSION inuti funktionen(duh...).
När jag tog bort den raden så funkade det klockrent!

Vad händer egentligen när man 'global-ar' $_SESSION?
Sätts den till NULL eller blir den unsettad?

Skumt, men troligtvis löst!

MatteMedlem sedan aug. 20002 975 inlägg
#7

$_POST, $_GET, $_SESSION m.fl är superglobala och behöver inte globaldeklareras i funktioner.

Däremot tycker jag det är konstigt att det skulle kunna få den effekt du visade på för att du gjorde det.

nadabalunasMedlem sedan okt. 200211 inlägg
#8

Man tackar.

Jag tycker också att det är ganska konstigt, men tusen tack för hjälpen och förklaringen av superglobalisarna!

132 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)