Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dziwny problem z sesjami
Forum PHP.pl > Forum > Przedszkole
cisu
Witam,

nie bardzo wiem co jest źle ale w przybliżeniu postaram się przedstawić co nie działa.

Zacznę od tego, że piszę CMS'a, panel usera działa ale nie działa nawet logowanie do panelu admina.

Nazwa sesji jest inna, chyba powinno działać.

Może po kolei, działa formularz, bo przesyła dane do walidacji (wiem bo jak podam złe dane to mam o tym komunikat). Po przesłaniu, teoretycznie zapisuje dane pod zmiennymi sesji (np. $_SESSION['login'). I tu chyba się zaczynają już problemy, bo dla bezpieczeństwa napisałem funkcję, która sprawdza, czy zalogowany jest użytkownik i czy ma on prawa admina. Nie działało mi to, więc dopisałem trochę i wiem już gdzie jest błąd. Na samym początku funkcji, kiedy przypisuję sobie zmienne
  1. $adminLogin = $_SESSION['login'];

Wychodzi na to, że zmienna $_SESSION['login'] jest cały czas pusta. I nie mam pojęcia czemu. Prędzej jest instrukcja przypisania do niej danych z formularza, do innych zmiennych innych danych. Ale nie działa. Już nie wiem, czy pisać od początku czy co bo mnie trafia. Jak czegoś nie dopisałem, to powiedzcie, dopiszę, tylko proszę, pomóżcie.
MateuszS
1. Pokaż więcej kodu
2. Skoro pisałeś funkcję, to możliwe że nie przekazałeś zmiennej sesyjnej jako parametr do niej.
bolo83
może brakuje session_start(); na początku pliku??
cisu
Co do kodu to wierzcie mi, nie ma tam nic nadzwyczajnego, sprawdzałem kilkanaście razy. Po drugie, zmienne sesyjne to raczej zmienne globalne, ale mimo to próbowałem przekazywać z parametrem i nie, żaden sposób nie działa. Po trzecie, może nie jestem z php najlepszy, ale session_start() dałem tongue.gif

Ale kod wygląda mniej więcej tak:

  1. $slogin = trim(htmlspecialchars($_POST['login']));
  2. $spass = sha1(md5(trim(htmlspecialchars($_POST['haslo']))));
  3. $skey = trim(htmlspecialchars($_POST['klucz']));


To wyżej to przypisanie zmiennym tymczasowym danych z formularza, to jeszcze działa.

  1. $_SESSION['admin_login'] = $slogin;
  2. $_SESSION['admin_haslo'] = $spass;
  3. $_SESSION['admin_klucz'] = $skey;
  4. header("Location: index.php");


To (po odpowiedniej walidacji) jest przypisanie zmiennym sesji wcześniej podanych danych, też działa bo przechodzi na index.php więc do tego momentu działa.

Tak wygląda logowanie, jak coś jest nie tak to wywala błędy (w przypadku złych danych), więc wszystko gra.

Problem pojawia się przy sprawdzaniu użytkownika podczas pracy, wychodzi na to, że w ogóle nie ma przy zmiennej $_SESSION['admin_login'] login wcześniej przypisanego i reszty chyba też bo mam na próbę tak, że jak tego nie ma to mi o tym mówi no i nie wiem czemu.

  1. $aLogin = $_SESSION['login'];
  2. $licz = mysql_fetch_row(mysql_query("SELECT COUNT(login) FROM tabelka WHERE login='$aLogin'"));
  3. if($licz[0] != 0) { tutaj mam instrukcje } else { echo "błąd"; // i własnie to się wyświetla }


Rekord w bazie mam, to nie o to chodzi. Sama próba wyświetlenia zmiennej $aLogin kończy się tym, że nie wyświetla nic, więc tak jakby jej w ogóle nie było, a przecież jest.

Może teraz coś podpowiecie?
misiek08
Zauważ, że w 1 miejscu masz
  1. $_SESSION['admin_login'] = $slogin;

a sprawdzasz
  1. $aLogin = $_SESSION['login'];

czyli login != admin_login.
cisu
Tutaj dałem błąd ale rzeczywiste nazwy zmiennych są inne i są takie same. Są może jakieś ograniczenia co do nazw sesji i zmiennych sesji?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.