Jag har ett sessionsproblem. På min site kommer man först till en inloggningssida där man skriver in loginnamn och så, när man submittat körs sedan lite kod som kollar om användarnamn o lösen stämmer, gör den det så vill jag skapa en session och lite sessionsvariabler och sedan skicka vidare användaren till en startsida. Enkelt!
Mitt problem är att all kod ligger i funktioner i en och samma fil. Det enda som händer när man loggar in osv är att man skickas till en annan funktion i samma fil och då vill inte min session hänga med.
Hur gör man detta? Måste man köra session_start i varje funktion? Hur går det till?
ps. Jag har ställt ngn liknande fråga förut men fortfarande inte lyckats lösa det. ds.
<?php
session_start (); // Kan det bero på att du har glömt denna?
if ( $_SESSION[ 'blnValidUser' ] ) {
echo "Inloggad";
}
else {
echo "Inte inloggad";
}
?>
Nu är ju SPIN våran store PHP-guru så jag har väl missuppfattat det hela. Som jag har uppfattat manualen så ska man om man har register_globals=on använda session_register() och om man har register_globals=off använda $_SESSION[] alternativt i äldre versioner $HTTP_SESSION_VARS[].
Så är det i allafall när jag har testat på 4.0.6; är register_globals på så funkar det inte riktigt med $HTTP_SESSION_VARS och tvärtom är register_globals av så fungerar det inte alls med session_register(). Men det kanske är annorlunda i 4.1.
Puh.. ok. Tyvärr kan jag inte bestämma så mkt vilken PHP-version som finns på servern jag jobbar mot men jag har installerat senaste PHP-versionen hemma nu.
Det funkar om jag lägger alla funktioner i olika filer men det är ju precis det jag inte vill, jag vill ha allt i en och samma fil.
Frågan är då t ex: måste jag skriva session_start högst upp i filen fast den ska starta i min Login-funktion?
Som du själv beskriver det så verkar ju själva session-hanteringen fungera eftersom det fungerar med olika filer. Då kommer vi tillbaka till ursprungsfrågan du ställde: hur får man det att fungera i en function. Själv har jag inte tid att testa mig fram hur du ska gå tillväga, men en "fuskväg" skulle ju kunna vara att ersätta:
elseif ($loggedin == true)
{
ShowStart();
}
och
function ShowStart()
{
Print "Nu är du inloggad ".$name."!";
}
med
elseif ($loggedin == true)
{
Print "Nu är du inloggad ".$name."!";
}
Sedan till frågan om session_start(). Med den php-versionen du har att tillgå så är troligtvis register_globals satt till on. Som jag har läst manualen så är det inte nödvändigt att använda session_start när man använder session_register (men det är dock en god vana att göra det), och det fungerar utan session_start på den php-version jag har på mitt webbhotell (4.0.4pl1).
Om jag tar bort kommenterar in if-satsen(och kommenterar ut header-grejen) här ovan skriver den ut rätt värde(name-variabeln). Om jag låter det stå som det gör nu hamnar man här:
elseif ($loggedin == true)
{
session_start();
Print "Nu är du inloggad ".$name."!";
}
Då skrivs inte name-variabeln ut. Det funkar inte hur jag än gör! Jag blir galen!