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ć?
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
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
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
Lista uwag i znalezionych błędów:
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);
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'];
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’];
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).