Säg att jag har lösenordskyddade sidor. Jag sätter en sessionsvariabel kallad $_SESSION["id"] till ett id värde. På de sidor som kräver att man är inloggad skriver jag:
if(isset($_SESSION["id"])) {
ungefär. Men om man skriver så, kommer man inte in på sidan om man själv gör en session variabel som heter id? (Alltså det spelar väl ingen roll VAR variabeln skapas, i mitt inloggningsscript eller på vilken sida som helst) Hoppas ni förstår vad jag menar med det här. Och om det är så här, vad lägger man in på sina lösenordskyddade sidor för att hindra det?
Det låter som ett klassiskt Register_globals problem. Om inte jag är helt fel ute nu så kommer alla variabler du skapar (ex $id i det här fallet) att replikeras till $_SESSION['id'] också. En tänkbar lösning på problemet är att stänga av register_globals eller att göra någon form av kontroll på $_SESSION['id'] så den innehåller vad du tror att den innehåller (och inte bara finns!)!
Nej, tror inte det. Jag har register globals avstängt. Det är liksom inte egentligen något problem, jag bara undrar om det är säkert att skriva sin kod så:
if(isset($_SESSION["id"])) { //Om man är inloggad
echo "Du är inloggad";
} else {
header("Location: login.php?error=1");
}
Är det inte nu möjligt för vem som helst att skriva ett litet php script där dom sätter en sessionvariabel kallad "id" till något. Kommer dom då inte in på min sida, trots att de inte kört mitt inloggningsscript?
Är det inte nu möjligt för vem som helst att skriva ett litet php script där dom sätter en sessionvariabel kallad "id" till något. Kommer dom då inte in på min sida, trots att de inte kört mitt inloggningsscript?
Nej, inte enkelt i varje fall eftersom en sessionvaiabel är knuten till en viss server.
Aha, då tror jag att jag fattar. Så när jag kollar om sessionsvariablen är satt så är det en variabel knuten till min server som det handlar om? Låter ju ganska smart faktiskt. :P
Tack för förklaringen!
264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e