PHP+MysQL+Sesje [Problem z wyświetlaniem nazwy usera]

Witam. Mam stronę z prostym systemem logowania. W pewnym miejscu jest taki fragment:

Witaj <? echo $_SESSION['uzytkownik']; ?>! Jesteś zalogowany.

Wyloguj[/code]

Niestety skrypt ten nie wyświetla wcale nazwy użytkownika. Może ktoś coś poradzić?

A zapisałeś coś w tej zmiennej, np nazwę usera podczas logowania ?

Dodane 29.01.2013 (Wt) 15:01

A zapisałeś tę nazwę w tej zmiennej, np podczas logowania ?

A session_start() masz w tym skrypcie?

Po pierwsze: http://php.net/manual/pl/function.session-is-registered.php - patrz sekcja UWAGA (tu robisz błąd).

Po drugie: SQLinjection (http://pl.wikipedia.org/wiki/SQL_injection) - nie zabezpieczasz parametrów formularza (POST) np. funkcją mysqli_real_escape_string i któś może Ci zrobić “kuku”.

Więc jak to poprawić? Co do zabezpieczania to wiem, gdyż jest to prosty skrypt a ja wciąż na etapie nauki :slight_smile:

Widzę, że “nie kumasz czaczy”, więc już wyjaśniam.

Jeśli korzystasz z funkcji session_register() i session_is_registered(), to nie używasz tablicy $_SESSION.

W pliku index.php masz taki kod:

Witaj <? echo $_SESSION['uzytkownik']; ?>! Jesteś zalogowany.

który jest niepoprawny. Powinieneś użyć

Witaj <? echo $uzytkownik; ?>! Jesteś zalogowany.

Ja od rejestracji zmiennej sesyjnej wolę się posługiwać (od początku do końca) tablicą $_SESSION, bo uważam taką metodę za bezpieczniejszą i wygodniejszą, ale każdy może robić jak chce.

P.S. A co do zabezpieczenia, to wiele osób pomija tę kwestię na początku pisania kodu, a potem często o tym zapomina i/lub sobie utrwala z czasem takie błędne zachowanie, co potem może prowadzić do fatalnych w skutkach włamań do serwisu (przerażająco często się o tym słyszy, i to o poważne firmy/serwisy chodzi).

Dziękuję za pomoc ale nadal nie wyświetla nazwy użytkownika… Nie wiem co się dzieje :(.

Postaram się trochę poczytać o tych zabezpieczeniach i zrobić to zanim strona wyjdzie na świat. Na razie to tylko projekt którym uczę się PHP i kombinuję sobie :slight_smile:

Wrzuć obecny kod to popatrzę, co może jeszcze być nie tak.

Wszystkie pliki w paczce:

http://speedy.sh/Cgvqb/PANEL.7z

W sumie działa tam tylko dodawanie newsów i logowanie. Nazwa użytkownika nadal się nie wyświetla :frowning:

Lista uwag i znalezionych błędów:

  1. Używasz skróconych tagów “<?” dla kodu PHP - nie jest to zalecane i czasami jest powodem błędów, bo wiele serwerów ma dla interpretera PHP ustawione pełne tagi typu “<?php” (to tylko informacja, pewnie u Ciebie to działa);

  2. W pliku login.php, w linii 9 masz

    $login=$_POST[‘login’];

a wcześniej nie sprawdzasz, czy ta zmienna jest w ogóle ustawiona - to niewłaściwe kodowanie, powinieneś użyć

if (isset($_POST['login']))

  $login=$_POST['login'];

else

  $login='';

lub w ostateczności

$login=@$_POST['login'];
  1. W tym samym pliku w linii 71 używasz zmiennej $PHP_SELF , która nigdzie nie jest zdefiniowana. Domyślam się, że powinna być gdzieś wcześniej tak:

    $PHP_SELF=$_SERVER[‘PHP_SELF’];

  2. W pliku index.php w linii 4

    if(!session_is_registered(“uzytkownik”)){ // Sprawdza zmienną sesji.

używasz funkcji przestarzałej i nie zalecanej 5. Przy łączeniu z bazą MySQL (plik login.php) w ogóle nie sprawdzasz błędów ani się przed nimi nie zabezpieczasz. Ciąg dalszy nastąpi (sprawdzam dalszy kod). – Dodane 27.02.2013 (Śr) 23:47 – A prawdziwym powodem nie wyświetlania się nazwy użytkownika była linia 5 w login.php

session_destroy();

Zastąpienie jej kodem

unset($uzytkownik);

lub

session_unregister("uzytkownik");

załatwi zapewne sprawę.

P.S. Ja trochę przerobiłem ten Twój kod (tak by u mnie zadziałał), więc 100% pewności Ci nie daję - sam to sprawdź (u mnie po zmianach zadziałało: ja używam zmiennej globalnej $_SESSION[] do trzymania danych sesyjnych).