Tack för din hjälp Matte men det funkar tyvärr inte. Fler förslag?
Session mellan funktioner
41 svar · 739 visningar · startad av web00132 · sida 2 av 3
Frågan, av web00132
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.
Läs frågan i sin helhet →Ursprungligen av Matte 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.
Om register_globals är satt till on, så kommer man åt alla $_* via dess namn som variabler, t.ex. följande:
echo $_GET[ 'value' ] . "<br/>";
echo $value;
Om register_globals är på, så skrivs värdet på value ( Skickat via adressraden, GET mao ) ut två gånger, annars endast en gång, dvs. första echo-raden. Det har alltså ingenting med session_register () att göra, utan session_register () måste finnas med för att en session ska kunna registreras/lagras. Så har jag uppfattat det hela, men det är ju inte säkert att det är så. :)
Åter till problemet:
Är du säker på att register_globals är satt till on? Istället för att använda variabel-namn, gå via den globala associativa arrayen $_SESSION. Alltså $_SESSION[ 'name' ] och $_SESSION[ 'loggedin' ].
SPIN. Du har, som alltid, rätt. Jag vet allt det där GET,POST mm, men trodde det var annorlunda med session. Det var ett litet un jag hade missat i manualen. :r
If you enable register_globals, session_unregister() should be used ...
web00132. Ursäkta att jag förvillade till begreppen.
Men av någon anledning har jag haft svårt att få $HTTP_POST_VARS (använder 4.0.6 och 4.0.4) att fungera när register_globals varit till, men inga problem när det varit av, men det lär väl bero på andra orsaker (t.ex min okunskap).
Jag har testat både $_SESSION och $HTTP_SESSION_VARS, jag har satt session_start() lite överallt, jag har testat fan allting snart men det går inte.
Vi har sett en del brottstycken av din kod men inte kunnat se helheten. Du skulle väl kanske kunna lägga upp hela koden. Bifoga den gärna som text-fil.
Till index.php följer också md5.js; ett script som krypterar lösenordet. Textfilen "shadow" ska också finnas med. I den står:
användarnamn(TAB)lösenord
skriver ett till inlägg med javascriptet
Scriptet.
Ok, jag tittade igenom första filen, och ändrade lite på sånt som såg ut att kunna skapa problem. En sak som man bör tänka på är att $HTTP_*_VARS ska man sätta till global i sina funktioner - medan $_* inte behövs sättas till global - de är det automagiskt. När jag ändrade använde jag $HTTP_*_VARS istället för $_* då jag inte visste vilken version av PHP du kör med, så att det ska funka ändå.
Min editerade version medföljer inlägget, hoppas att den ska funka bättre. Något som du dock glömde att nämna var vad som hände. Vad skrevs ut på skärmen, ev. felmeddelanden, osv. Skulle underlätta ännu mer... :)
Hans felmeddelande var att $name-variablen var tom, om jag inte missuppfattat allt.
Har ändrat lite och testat. Denna fil fungerar för mig med register_globals=on.
Och denna fungerar för mig med register_globals=off, men INTE med register_globals=on.
Upptäckte lite skitfel som jag råkade få med i min fil, använde POST istället för GET i början av filen... :r
Hursomhaver är det ändrat nu, så kolla min fil igen om du fick fel fil... :)
Tack så hemskt mycket! Mattes första fil fungerar utmärkt för mig, dock ingen av SPiNs. Och grejen är den att jag vill ju använda mig av funktioner och dom har Matte tagit bort.
Som jag skrivit tidigare så har jag testat förmodligen alla olika kombinationer vad gäller $_SESSION osv. så det var egentligen inte problemet. Och som ThACRoW skriver så är just felmeddelandet det att sessionsvariabeln $name inte vill hänga med och skrivas ut.
Problemet kvarstår:
sessionen vill inte följa med in i funktionen.
Jag ska kolla igenom era filer igen, återkommer om en halvtimme om jag hittat ngt. Tack återigen!
Har du satt register_globals till off? Jag har inte PHP installerat här, så jag kan inte testa min fil - men jag tycker att den ser ut att fungera.
Trixade lite till:
Med den senaste filen du skickade SPiN så hamnar jag vid "You must supply a loginname!", variabeln försvinner ngnstans på vägen men jag hittar inte var.
Jag hittade felet. Det ska vara:
$HTTP_POST_VARS[ 'login' ]
istället för
$HTTP_POST_VARS[ 'name' ]
Men det löste inte det stora problemet, sessionsvariabeln $name skrivs fortfarande inte ut.
Jag tror jag har löst ditt problem :e
Leta reda på dessa rader:
$blnValidUser = true;
$name = $login_name;
Ändra dom till:
$HTTP_SESSION_VARS['blnValidUser'] = true;
$HTTP_SESSION_VARS['name'] = $login_name;
Ni vet, en funktion har ju sina lokala variabler... kan bero på det?
Jag förstår vad du menar men det är ju dom variablerna som på raderna under blir till sessionsvariabler, så på stället du menar att man ska ändra har ingen session skapats än. Tack ändå!
Här är en variant med funktioner som fungerar för mig.
Så här är det din funktion ser ut lite förenklat:
<?
session_start();
test();
print $HTTP_SESSION_VARS['a'];
function test()
{
$a = 'hej hopp';
session_register("a");
}
?>
Funktionen ovan fungerar inte för mig. Men det gör nämligen denna:
<?
session_start();
test();
print $HTTP_SESSION_VARS['a'];
function test()
{
global $HTTP_SESSION_VARS;
session_register("a");
$HTTP_SESSION_VARS['a'] = 'lalala';
}
?>
Prova båda !
