[php] Sesja nie zapamiętuje danych

0

Chcę użyć w skrypcie logowania sesji, tak, aby był w niej zapamiętywany login użytkownika. Jednak po przeładowaniu strony wszystko z $_SESSION znika. Po odczytaniu zwraca pustą wartość. Przez to nazwa użytkownika wyświetla się tylko po zalogowaniu, a po przejściu do jakiegoś działu jest już pusta. Wstawiłem session_start(); w indexie i pliku ze skryptem logowania. Oto kawałki kodu:

index.php

    if($Action == 'login'){
     include('data/login.php');
    }   
    if(session_is_registered('S_UserName')) $UserName = $_SESSION['S_UserName'];    

data/login.php

<?php       
  session_start();
        $UserName = $_POST['uzytkownik'];
        $Password = md5($_POST['haslo']);

  if($DateBase = mysql_connect('***','***','***')){
         if(mysql_select_db('***l')){
             if(mysql_num_rows(mysql_query('SELECT * FROM `users` WHERE `login`=\'' .$UserName .'\' AND `haslo`=\'' .$Password .'\' LIMIT 1')) > 0){
     $_SESSION['S_UserName'] = $UserName; 

                } else $SQLERROR = 'Nieprawidłowy login lub hasło';
            } else $SQLERROR = 'Nie znaleziono bazy danych';
        } else $SQLERROR = 'Nie udało się połączyć z bazą danych';
?>  

Czemu wszystkie dane zaraz znikają?

0

hmm, a czy na pewno warunek $action == 'login' jest spelniony?
nie uzywaj session_is_registered... sprawdzaj za pomoca isset()

tak przy okazji to poczytaj sobie o http://pl.wikipedia.org/wiki/SQL_injection

0

O ile się nie mylę to session_start() wywołujesz zawsze kiedy chcesz mieć dostęp do zmiennych sesyjnych.

pom napisał(a)

Przez to nazwa użytkownika wyświetla się tylko po zalogowaniu, a po przejściu do jakiegoś działu jest już pusta.

Jeżeli "jakiś dział" jest obsługiwany przez inny skrypt (niż te w których wstawiłeś session_start()) to w nim też musisz wznowić sesję chyba, że np skrypt "jakiegoś działu" jest załączany do index.php.</quote>

Karolaq napisał(a)

tak przy okazji to poczytaj sobie o http://pl.wikipedia.org/wiki/SQL_injection

i przy okazji okazji poczytaj o mysql_escape_string().

0

Mozesz tez uzyc print_r($_SESSION); i sprawdzic czy id sesji jest ciagle to samo.
Poza tym, tak jak napisal jrCoder: w kazdym skrypcie, w ktorym uzywasz zmiennych ustawiaj session_start(); i jezeli sesja jest przechowywana w plikach to ustawiaj tez session_patch('/sciezka/do/sesji'); (przed session_start();) w ten sposob, zeby wszystkie sesje byly trzymane w jednym katalogu.

Kiedys mialem taki przypadek, ze ze zmienne sesyjne o tej samej nazwie byly uzywane w dwoch skryptach, ale mialy rozne dane. Okazalo sie, ze byly dwa rozne pliki sesji dla dwoch roznych skryptow.

Poza tym print_r(); mozesz uzywac na $_POST, $_GET, $_SERVER - naprawde czasem bardzo pomaga :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0