Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przechowywanie obiektu w sesji
yacoos
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 19.02.2005

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


Witam.
Na początku wypada się przyznać, że pierwszy raz próbuję przechować obiekt w sesji - jest to konkretnie obiekt QuickForm.
Na początku dostawałem worning o session_start. Więc teraz mam już najpierw :

  1. <?php
  2. include "HTML/QuickForm.php";
  3. include 'HTML/QuickForm/Renderer/ArraySmarty.php';
  4. include '../smarty/Smarty.class.php';
  5. ?>


a dopiero później:
  1. <?php
  2. session_name("xxx");
  3. ?>

Próbowałem już rozmaitych kombinacji i aktualnie sprawa wygląda tak - mam formularz tworzony quickformem i smarty. Nie wiem czy to potrzebne, ale obiekt tworzony jest od razu w sesji:
  1. <?php
  2. $_SESSION['formularz'] = new HTML_QuickForm('form_add_0', 'POST', 'test2.php?action=dodaj&krok=1');
  3. ?>


Pod tym formularzem wyświetlam sesję i jej zawartość jest poprawna. Dla uproszczenia plik test 2 zawiera już tylko:
  1. <?php
  2. include "HTML/QuickForm.php";
  3. include 'HTML/QuickForm/Renderer/ArraySmarty.php';
  4. include '../smarty/Smarty.class.php';
  5. session_name("skylan2");
  6. echo "<pre>";
  7. print_r($_SESSION);
  8. print_r(unserialize($_SESSION['serial']));
  9. echo "</pre>";
  10. ?>

I tutaj niestety zarówno bezpośrednio jak po zdeserializowaniu widzę zawsze: [__PHP_Incomplete_Class_Name] => html_quickform_text
[0] => __PHP_Incomplete_Class Object
itd..
Bardzo proszę o jeszcze jakieś sugestie bo już zupełnie zabrakło mi pomysłów.

Pozdrawiam,
yacoos
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sedziwoj
post
Post #2





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

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


Najpierw cytacik z manuala:
Cytat
Thus, you need to call session_name() for every request (and before session_start() or session_register() are called).


A co do problemu to obiekt zapisywany do sesji jest automatycznie serializowany, przez wywołanie metod __sleep() tegoż obiektu, jeśli nie ma zdefiniowanej to wywoływana jest domyślna metoda.
Jeśli autorzy klasy HTML_QuickForm nie przewidzieli możliwości serializacji (a też nie zablokowali, co się często zapomnieć zdarza) to rezultat może być różny.

A do tego nie:
  1. <?php
  2. print_r(unserialize($_SESSION['serial']));
  3. ?>

a
  1. <?php
  2. print_r($_SESSION['serial'])
  3. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 16:05