Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> otwarcie sesji w konstruktorze, dlaczego nie działa?
koodlaty
post 12.09.2006, 12:40:47
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):

  1. <?php
  2. if(!isset($_SESSION['obiekt']))
  3. {
  4. $obiekt = new klasa;
  5. $_SESSION['obiekt'] = $obiekt;
  6. }else
  7. $_SESSION['obiekt'] -> jakas_metoda();
  8.  
  9.  
  10. class klasa
  11. {
  12. function __construct()
  13. {
  14. }
  15.  
  16.  
  17. public function jakas_metoda()
  18. {
  19.  
  20. }
  21. }
  22. ?>


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?
Go to the top of the page
+Quote Post
nospor
post 12.09.2006, 12:42:08
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




bo sesje sie staruje na poczatku skryptu a nie w konstruktorze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
koodlaty
post 12.09.2006, 12:45:12
Post #3





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 12.09.2006, 13:42:08 ) *
bo sesje sie staruje na poczatku skryptu a nie w konstruktorze


A gdzie to jest powiedziane? Sesja powinna byś otwarta przed wysłaniem nagłówka.


--------------------
-----------------------
My hovercraft is full of eels!
Go to the top of the page
+Quote Post
nospor
post 12.09.2006, 12:48:41
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tego sie nie mowi glosno. To wyplywa z logiki 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 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
koodlaty
post 12.09.2006, 13:04:28
Post #5





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 12.09.2006, 13:48:41 ) *
Tego sie nie mowi glosno. To wyplywa z logiki 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 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.
  1. <?php
  2. if(!isset($_SESSION['obiekt']))
  3. ?>


Skoro otrzymujemy false tworzony jest obiekt, w którym otwierana jest sesja. Sesja tworzona jest prawidłowo.
  1. <?php
  2. $obiekt = new klasa;
  3. ?>


Jeśli mamy już sesję zapisujemy do niej utworzony obiekt:
  1. <?php
  2. $_SESSION['obiekt'] = $obiekt;
  3. ?>


Od tej pory mamy sesję i obiekt w niej zapisany, kolejne wywołanie;
  1. <?php
  2. if(!isset($_SESSION['obiekt']))
  3. ?>

powinno zwrócić true

Gdzie leży błąd w tej logice?


--------------------
-----------------------
My hovercraft is full of eels!
Go to the top of the page
+Quote Post
nospor
post 12.09.2006, 13:11:36
Post #6





Grupa: Moderatorzy
Postów: 36 557
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!!!


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
koodlaty
post 12.09.2006, 13:25:20
Post #7





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 12.09.2006, 14:11:36 ) *
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?

  1. <?php
  2. $a = 2;
  3. $b = 2;
  4.  
  5. $c = $a + $b;
  6.  
  7.  
  8. if(!isset($_SESSION['wynik']))
  9. {
  10. $_SESSION['wynik'] = $c;
  11. echo('nie bylo sesji - tworzymy');
  12. }else
  13. {
  14. echo($_SESSION['wynik'] . '<br />');
  15. echo('sesja istnieje');
  16. }
  17. ?>


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.


--------------------
-----------------------
My hovercraft is full of eels!
Go to the top of the page
+Quote Post
nospor
post 12.09.2006, 13:27:00
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ten przyklad co pokazales wlasnie udowadnia ze mam racje 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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
koodlaty
post 12.09.2006, 13:42:31
Post #9





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

Ostrzeżenie: (0%)
-----


faktycznie - kumam, thx smile.gif


--------------------
-----------------------
My hovercraft is full of eels!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:33