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 Prova lägg $userid före session_register och sätta session_start överst på sidan.
Ingen lycka tyvärr..
Jag provade ditt förslag, men med samma resultat...
MatteMedlem sedan aug. 20002 975 inlägg 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 ?
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?
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 $_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.
Man tackar.
Jag tycker också att det är ganska konstigt, men tusen tack för hjälpen och förklaringen av superglobalisarna!