Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zachowanie Sesji
Forum PHP.pl > Forum > PHP
mcstar
Robię system obsługi ogłoszeń (oparty na: smarty, językach, i upiększaniu adresów dla google - czyli jak kto woli mod_rewrite). Na stronie głównej (index.php) startuje sesję, gdy rejestruje tutaj zmienne do sesji to wszystko jest OK! Jednak na stronę głowną są wczytywane inne pliki np. z rejestracją użytkowników, logowaniem,etc za pomocą starej banalnej metody winksmiley.jpg (powiedzmy że index.php to ogólny szablon dla całego serwisu).

  1. <?php
  2.  
  3. if (file_exists(_SCIEZKA_PLIKU_)){
  4.     require_once(_SCIEZKA_PLIKU_);
  5. }
  6. else {
  7.     require_once(_SCIEZKA_PLIKU_404_);
  8. }
  9.  
  10. ?>


problem z sesją pojawia się właśnie w tym momęcie, załóżmy że pobieram plik rejestracja.php -> ten plik pobiera lang i tworzy szablon smarty tylko dla formularza rejestracji w pierwszym kroku, w drugim kroku wyświetla potwierdzenie danych, a w 3 zapisuje do bazy i tu równiez powinien zarejestrować nową zmienną w sesji, aby nie dało się po przypadkowym odświeżeniu strony ponownie dodać tych samych danych do bazy:

  1. <?php
  2.  
  3. if ($sess_dodano!='tak'){
  4.         if (zapytanie_mysql_insert('uzytkownicy',array(
  5.                 'id'=>'''',
  6.                 'login'=>'''.$f_login.''',
  7.                 'haslo'=>'''.$f_haslo1.''',
  8.                 'email'=>'''.$f_email1.''',
  9.                 'imie'=>'''.$f_imie.''',
  10.                 'nazwisko'=>'''.$f_nazwisko.''',
  11.                 'data_rejestracji'=>'''.time().''',
  12.                 'data_ostatnia'=>'''',
  13.                 'data_aktywacji'=>'''',
  14.                 'uprawnienia'=>'''.'user'.''',
  15.                 'aktywny'=>'''.$akt.''',
  16.                 'kod_aktywacyjny'=>'''.$kod_aktywacyjny.'''
  17.         ))){
  18.  
  19.             $sess_dodano='tak';
  20.             session_register("sess_dodano");
  21.         }
  22.     }
  23.  
  24. ?>


Na oko wszystko fajnie -> tylko że zmienna się nie rejestruje w sesji, co więcej nie pomogło nawet ponowne startowanie sesji przed samym session_register, to samo polecenie w index.php działa. Pomocy.... smile.gif


P.S.
żeby nie było krzyku biggrin.gif że nie ma $_SESSION['sess_dodano'] tylko jest po prostu $sess_dodano więc już pokazuje początek strony index.php

  1. <?php
  2.  
  3. extract($_COOKIE);
  4.  
  5. extract($_SESSION);
  6. extract($_GET);
  7. extract($_POST);
  8. extract($_SERVER);
  9.  
  10. ?>


Zmiennych jest dużo i ciągłe pisanie $_COSTAM['cos'] -> było by bardzo uciążliwe, a w ten sposób można uprościć sobie życie winksmiley.jpg
sf
To oczywiscie, ze Ci to nie zadziala, niby czemu by miało działać? Uzywasz extract, wiec ta zmienna potem juz nie jest zmienna sesyjna, tylko zwykla zmienna. A to nie jest ulatwianie sobie zycia tylko tworzenie dziur w aplikacji.
mcstar
No oczywiście że zmienna później powinna stać się zwykła zmienną - problem leży w tym że nie ma co się stać tą zwykła zmienną winksmiley.jpg bo sesja jest zupełnie pusta... problem leży w tym że session_register nic nie rejestruje!! Jak zarejestrowałem w innym pliku tą zmnienną to aplikacja ruszyła bez zarzutu... i odczytała wszystko bez problemu. Setno problemu leży w tym, że session_register i session_unregister działa tylko w index.php nie można użyć tego w plikach pobieranych za pomocą require_once (a w zasadzie to można tylko że efekt jest taki sam, tzn brak efektu, plik na serwerze z sesją ma: 0 kB). Z resztą jeśli wyrzucę extract($_SESSION); i będę odczytywał za pomocą $_SESSION['sess_dodano'] to aplikacja działa tak samo jak teraz - sesja jest pusa i nic się do niej nie chce zarejestrować.
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.