Miért nem működnek a session változóim?
Van egy kezdetleges login felületem, amihez session változókat hozok létre egy login.php lapon. A nevük értelemszerűen username és password. A felhasználónév és jelszó beírását követően egy process.php nevű oldalra irányít át.
Most még csak az van, hogyha rossz a jelszó és felh. név, akkor kiírja, hogy nem jó a felhasználónév és a jelszó.
A lényeg az, hogy a session változó átmegy a process.php-ra, de az adatbázis már képtelen felfogni. Tudom echo-zni, látszik, átmegy, de a mysql lekérdezésnél már bszik normálisan működni, mintha addigra elveszne a fájl. Töröltem cookie-kat, előzményeket stb... Elvileg ezzel nem lehet gond. Az adatbázishoz és a táblához csatlakozik rendben, mert kipróbáltam sima változókkal és $_POST-tal és úgy ment, csak a sessiont nem szereti.
A process.php-n ezt csinálom:
$username = $_SESSION["username"];
$password = $_SESSION["password"];
mysql_connect("localhost", "akarmi", "akarmi");
mysql_select_db("login");
$result = mysql_query
("select * from users where username = '$username' and password = '$password'")or die("nem megy". mysql_error());
$row = mysql_fetch_array($result);
Lehet, hogy nem kéne sima globális változóba átvinnem az adatokat, de egyszerűen halovány fingom nincs hogy van a szintaktikája a lekérdezésnek, ha session változót kérdezek le. Magyarul nem tudom, hogy a kapcsolódásnál hogyan írom be azt, hogy $_SESSION["username"] a $username helyére, mert mindig parse errort ír ki. Mi lehet a gebasz?
Még úgy is működik, hogy a login.php oldalon beírom, hogy:
$_SESSION["username"] = "testuser";
$_SESSION["password"] = "testuserpass";
De ha már megkapja a login.php-n postból, akkor nem. Ha rossz jelszót definiálok a session változóba, akkor hibaüzenetet ír, ahogy kell.
Nem vérzik?
Egy ekkora SQL injection?
"Nem vérzik?
Egy ekkora SQL injection?"
Felismerlek téged, te vagy a kötekedős, aki minden kérdésre azt válaszolja, hogy nem érted a saját felvétésed, az alapoktól kellene elkezdeni, meg előbb tanuld meg ezt és azt. Tudom, hogy jó móka lehet direkt idegesíteni a fórumozókat, de basszus neked nincs életed?
Csak hogy egy párat említsek az égig magasztalt rendszered hiányosságaiból, hibáiból:
1) Ha sessiont akarsz használni, akkor előbb azt el kell indítanod:
session_start();
2) Ha már nem kell a session (pl. kijelentkezett a júzer), akkor session_destroy();-al le kell zárni azt.
3) Ha van egy lapod, amin van egy felhasználónév és egy jelszó mező, akkor azokat a $_POST vagy $_GET tömbökben érheted el, függően attól, hogy mi a form method attribútumának értéke.
4) Visszatérve a 3. ponthoz, sem a $_POST, sem a $_GET tömböket nem használjuk közvetlenül, mivel iszonyatosan veszélyes. Minimum egy filter_var-t rá kell ereszteni, de ettől sokkal szigorúbb megszorításokat kell rá kiróni.
5) Miért veszed biztosra, hogy sikerült kapcsolódni az adatbázishoz?
6) Miért veszed biztosra, hogy sikerült átállítanod az alapértelmezett adatbázis-sémát?
7) A mysql_ kezdetű függvények már nagyon régen nem ajánlottak (deprecated, azaz már a PHP7-ben benne sincs). Helyettük van mysqli_ vagy PDO.
8) Felhasználótól származó adatot ellenőrzés nélkül sosem teszünk lekérdezésbe. Csak úgy kíváncsiságból, ha a $username értéke "sanyi' or 1=1 LIMIT 1 --", rögtön be vagyok jelentkezve egy más felhasználó fiókjába. Szóval, vagy escape-eled, vagy prepared statement-eket használsz.
9) Honnan tudod, hogy nem üres eredményhalmazt ad a lekérdezésed (pl. nincs olyan felhasználó vagy hibás a jelszó).
10) Felhasználónak sosem írunk ki részletes hibaüzenetet, érje be annyival, hogy "valami nem jött össze".
A legfontosabbat kihagytam:
11) Jelszót sosem tárolunk titkosítatlanul.
És hogy ne kelljen gondolkodnod, a kész megoldást megírom neked:
session_start();
if (isset($_POST["username"]) && isset($_POST["password"])) {
.. //feltéve, hogy stimmelt a felhasználónév és jelszó, amit természetesen kellő ellenőrzéssel láttál el:
.. $_SESSION["username"] = $_POST["username"]; //Onnan tudod, hogy egy felhasználó be van jelentkezve, hogy a $_SESSION["username"] értéke nem NULL
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!