![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 3 Dołączył: 6.07.2006 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
Cóż - może jestem już zmęczony, może popełniłem jakiś oczywisty błąd, a może po prostu o czymś nie wiem. Tak czy siak nie działa mi kod tego rodzaju (kod uprościłem do postaci przedstawiającej esencje problemu):
Dlaczego obiekt tworzony jest wciąż na nowo? Sprawdziłem – sesja uruchomiona jest prawidłowo, parser nie zgłasza błędów. Może ktoś mnie oświeci? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
bo sesje sie staruje na poczatku skryptu a nie w konstruktorze
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 3 Dołączył: 6.07.2006 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Tego sie nie mowi glosno. To wyplywa z logiki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Zastanow sie. Teraz w skrypcie na poczatku sprawdzasz czy istniejesz obiekt w sesji. Jest tylko maly problem.... sesja nie zostala jeszcze wystartowana, wiec w sesji nic nie ma (wogole sesji nie ma). Wiec logicznie rzecz biarac, zeby sprawdzic cos w sesji, trzeba najpierw ja wystartowac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 3 Dołączył: 6.07.2006 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
Tego sie nie mowi glosno. To wyplywa z logiki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Zastanow sie. Teraz w skrypcie na poczatku sprawdzasz czy istniejesz obiekt w sesji. Jest tylko maly problem.... sesja nie zostala jeszcze wystartowana, wiec w sesji nic nie ma (wogole sesji nie ma). Wiec logicznie rzecz biarac, zeby sprawdzic cos w sesji, trzeba najpierw ja wystartowac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tak na logike to mi to właśnie powinno działać. Po kroku: sesja nie istnieje, nie istnieje wiec obiekt - otrzymujemy false. Sprawdzamy zawartość pola w tablicy. Przecież jeśli nie istnieje pole o danym indeksie lub sama tablica otrzymujemy fałsz.
Skoro otrzymujemy false tworzony jest obiekt, w którym otwierana jest sesja. Sesja tworzona jest prawidłowo.
Jeśli mamy już sesję zapisujemy do niej utworzony obiekt:
Od tej pory mamy sesję i obiekt w niej zapisany, kolejne wywołanie;
powinno zwrócić true Gdzie leży błąd w tej logice? |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Blad w tej logice jest taki, ze nie wiesz jak sie uzywa sesji w php. Jesli chcesz uzywac sesji, to session_start zawssze musi byc na poczatku skryptu, inaczej sesja wogole ci nie wystartuje, nawet pomimo tego iz poprzednim razem ci wystartowala w konstruktorze.
Uzywasz sesji - session_start() ma byc zawsze!!! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 3 Dołączył: 6.07.2006 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
Blad w tej logice jest taki, ze nie wiesz jak sie uzywa sesji w php. Jesli chcesz uzywac sesji, to session_start zawssze musi byc na poczatku skryptu, inaczej sesja wogole ci nie wystartuje, nawet pomimo tego iz poprzednim razem ci wystartowala w konstruktorze. Uzywasz sesji - session_start() ma byc zawsze!!! Chętnie bym Ci przyznał rację i miał święty spokój. Zrobiłem jednak eksperyment, który jak myślę udawania, że nie masz racji. Dlaczego poniższy kod działa zgodnie z oczekiwaniem a ten przedstawiłem na początku nie?
Nigdzie nie doczytałem się też, że session_start ma się znajdować na samym początku. Z całą pewnością sesja musi zostać otwarta zanim wyślemy cokolwiek do przeglądarki ale nie na samym początku. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ten przyklad co pokazales wlasnie udowadnia ze mam racje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Z mojej strony to tyle, reszta pozostawiam tobie. Przemysl sobie jeszcze raz wszystko pomalutku edit: mowiac na poczatku skryptu, mam na mysli przed jakim kolwiek odwolaniem do $_SESSION. A skoro skrypt ma uzywac sesji to z reguly daje sie to na poczatku by se glowy nie zawracac pozniej w kodzie. Co nie zmienia faktu ze Twoj pierwszy skrypt mial session_start juz po odwolaniu do $_SESSION przez co nie mial prawa dzialac poprawnie |
|
|
![]() ![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 3 Dołączył: 6.07.2006 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
faktycznie - kumam, thx (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.10.2025 - 10:06 |