Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sesja I Obiekty
styx
post
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?
Go to the top of the page
+Quote Post
Cysiaczek
post
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.
Go to the top of the page
+Quote Post
Cezar708
post
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
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
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
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
Go to the top of the page
+Quote Post
wrzasq
post
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
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.
Go to the top of the page
+Quote Post
koodlaty
post
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 02:02