Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sesja I Obiekty
styx
post 10.08.2007, 14:25:07
Post #1





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

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


Czy można przechowywać obiekty w zmiennych sesyjnych? jezeli tak to jak?


--------------------
"Istotne problemy naszego życia nie mogą być rozwiązane na tym samym poziomie myślenia, na jakim byliśmy kiedy je tworzyliśmy". A.Einstein
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Cysiaczek
post 10.08.2007, 14:27:19
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




serialize" title="Zobacz w manualu PHP" target="_manual i zapisujesz do zmiennej sesyjnej.
Pamiętaj jednak, że nie możesz serializować obiektów wbudowanych w php

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Cezar708
post 10.08.2007, 15:07:02
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


dodam, że istnieją jeszcze funkcje magiczne: __sleep() i __wakeup() być może Ci się przydadzą.
Go to the top of the page
+Quote Post
Ludvik
post 10.08.2007, 16:05:33
Post #4





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Poza tym, trzeba uważać, żeby do sesji nie trafił obiekt, który może się "zestarzeć". Jeżeli jesteś pewny, że możesz te dane przechować w sesji, to nie ma problemu.


--------------------
Go to the top of the page
+Quote Post
bronchos
post 22.08.2007, 21:37:44
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 16.03.2007

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


No i oczywiście, jeśli obiekt przechowuje w swoich zmiennych inne obiekty, to je również wypadałoby serializować. A do tego wyżej wspomniane __sleep() i __wakeup().
Go to the top of the page
+Quote Post
dr_bonzo
post 22.08.2007, 21:43:12
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


I przy wyciaganiu obiektow z sesji (przed session start) zaladuj definicje klas tych obiektow


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
wrzasq
post 23.08.2007, 01:05:13
Post #7





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


upewnij sie tez, ze nie masz wlaczonego "session.auto_start" w php.ini. inaczej, sesja bedzie rozpoczynana automatycznie na starcie PHP, a wiec zanim zdazysz zdefiniowac klasy obiektow, ktore w tej sesji przechowujesz (co oczywiscie spowoduje blad).

innymi slowy, podsumowujac wszelkie obawy i wszystkie ewentualnosci, ktore trzeba brac pod uwage bawiac sie w obiekty w sesjach, sadze, ze jezeli nie piszesz czegos wybitnie zorientowanego obiektowo, lepiej jest przechowywac tylko wartosci pol poszczegolnych skladowych w sesji i potem odtwarzac obiekt (oczywiscie nie zawsze, ale jest to znacznie pewniejsze, wiec dopuki nie trzeba, to imho nie ma co sie pchac).

Ten post edytował wrzasq 23.08.2007, 01:07:31


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 23.08.2007, 07:48:15
Post #8





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Cysiaczek @ 10.08.2007, 15:27:19 ) *

Po przypisaniu do sesji obiektu przy zapisie sesji jest automatycznie wywoływana serializacja, tylko przy własnym handlerze trzeba wymusić pierszeństwo jego wykonania, inaczej obiekty zostaną zniszczone przed zapisaniem sesji.
Cytat
Pamiętaj jednak, że nie możesz serializować obiektów wbudowanych w php


Wbudowanych, to znaczy jakich?
Nie mozna wszystkiego rodzaju "uchwytów" czyli np. połączenia do bazy danych itd. czyli szczególnie typu resource.... ale to jak widzę jest napisane w podanym przez Cysiaczek linku.

Ogólnie jeśli zaimplementujesz __sleep() i __wakeup() i obiekt będzie dostępny w czasie odtwarzania sesji to nie będzie problemów.
A te dwie metody mogą po prostu do sesji zapisywać (i odczytywać) tylko parę wartości, więc jednak chyba lepiej wykorzystywać je, niż na sztywno wykorzystywać mechanizm sesji.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
koodlaty
post 4.09.2007, 07:18:12
Post #9





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

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


Cytat(Cezar708 @ 10.08.2007, 16:07:02 ) *
dodam, że istnieją jeszcze funkcje magiczne: __sleep() i __wakeup() być może Ci się przydadzą.

Cytat
No i oczywiście, jeśli obiekt przechowuje w swoich zmiennych inne obiekty, to je również wypadałoby serializować. A do tego wyżej wspomniane __sleep() i __wakeup().

Zdeprecjonowane na rzecz interfejsu Serializable:

Serializable Interface Reference
Improved object serialization with the Serializable interface


--------------------
-----------------------
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: 14.08.2025 - 07:59