Kezdőoldal » Számítástechnika » Programozás » Miért nem működnek a session...

Miért nem működnek a session változóim?

Figyelt kérdés

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?



#adatbázis #MySQL #login felület #mysql php login
2016. okt. 18. 15:12
 1/7 A kérdező kommentje:

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.

2016. okt. 18. 15:19
 2/7 anonim ***** válasza:
Hát ez bizony nagyon sok sebből vérzik. Nem valami egyszerűbbel kellene kísérletezni?
2016. okt. 18. 15:32
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:
Haggyad már! Nem vérzik ez egy sebből sem. Nekem az a kérdésem, hogy hogyan tudom megoldani azt, hogy post-ként elküldjem az adatot a session változónak.
2016. okt. 18. 15:35
 4/7 anonim ***** válasza:

Nem vérzik?

Egy ekkora SQL injection?

2016. okt. 18. 16:05
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

"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?

2016. okt. 18. 16:18
 6/7 anonim ***** válasza:

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".

2016. okt. 18. 16:39
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

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

}

2016. okt. 18. 16:43
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!