Dokumentacja PHP mówi: "Nie można używać odwołań w zmiennych sesji, ponieważ nie istnieje żaden możliwy sposób przywrócenia odniesienia do innej zmiennej."Przechowywanie obiektów w sesji PHP
Czy to znaczy, że nie mogą mieć takie rzeczy jak:
session_start();
$user = new User;
$user->name = 'blah';
$_SESSION['user'] = $user;
Próbowałem przechowywać prosty łańcuch i obiektu użytkownika w sesji, ciąg zawsze utrzymuje się pomiędzy stronami do stron lub po odświeżanie strony. Jednak zmienna użytkownika jest tracona w $ _SESSION (staje się pusta).
jakiś pomysł?
Edytuj: Edytuj: Potwierdziłem, że identyfikator sesji jest taki sam na wszystkich tych stronach/podstronach, przed & po odświeżeniu strony.
Edytuj: Edycja: Co dziwne, po tym, jak spróbowałem ponownej translacji i unserializacji poniżej, serializowany obiekt użytkownika (lub ciąg znaków) w sesji nadal znika!
Edycja: W końcu zorientowałem się, co to błąd, wygląda jakoś $ _SESSION ['user'] zostaje nadpisany przez jakąś tajemniczą siłę, jeśli używam jakiejkolwiek zmiennej innej niż "user", wszystko jest w porządku. PHP (przynajmniej wersja 5.3, której używam) dokonuje serializacji i automatycznie się odserializuje po umieszczeniu obiektu w $ _SESSION.
session_start();
$user = new User();
$user->name = 'blah'
$_SESSION['myuser'] = $user;
sesje PHP może zostać porwany, więc najlepiej, aby nigdy nie przechowuje żadnych informacji o użytkowniku w nich. Zapisałbym identyfikator użytkownika i hashowane hasło w pliku cookie. Następnie, gdy potrzebujesz informacji o użytkowniku, ściągnij z bazy danych (używając identyfikatora zapisanego w pliku cookie), a następnie sprawdź poprawność hasła hash. Jeśli test hash-pass się powiedzie, wypełnij obiekt użytkownika informacjami z bazy danych. – brianreavis
ale to dodaje obciążenie związane z wywoływaniami bazy danych za każdym razem, gdy trzeba pobrać informacje o użytkowniku, zamiast pobierać dane użytkownika raz z bazy danych, a następnie móc z niego korzystać podczas sesji. – user157195
Pewnie, dodaje narzut. Ale czy troszczysz się bardziej o koszty ogólne lub bezpieczeństwo? Możesz * przechowywać * dane użytkownika w sesji *, jeśli * miałeś je potwierdzić (łącząc technikę ciasteczek). Ale na pewno * nie * używaj sesji na oślep. – brianreavis