<?php class Session { // Dane private $copy; // Kopia zapasowa sesji // Zmienne logiczne private function __construct() { // start sesji // sprawdzenie czy użytkownik był już na stronie (czy ciasko z numerem IP istnieje) // jeżeli nie zmienna sesji REMOTE_ADDR otrzyma wartość numeru IP komputera który korzysta ze strony // jeżeli zmienna już istnieje i nie jest równa aktualnemu adresowi IP to możliwe jest iż sesja została przechwycona. // w takim przypadku w celu bezpieczeństwa uruchomiona zostaje metoda destroy. $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR']; } elseif($_SESSION['REMOTE_ADDR'] !== $_SERVER['REMOTE_ADDR']) { $this->destroy(); } $this->send_session_data(); } private function send_session_data() { $this->copy = $_SESSION; } public function get_session_copy() { return $this->copy; } /** * Instancja (singleaton) * * Funkcja pobiera używaną instację klasy lub tworzy nową jeśli nie istnieje * * @access public * @param void * @return instance */ if(!self::$instance instanceof self) self::$instance = new self; return self::$instance; } /** * Niszczenie sesji * * Funkcja ustawia pustą tablicę jako wartość sesji, a następnie całkowicie ją niszczy. * * @access public * @param void * @return instance */ public function destroy() { // usunięcie wszystkich zmiennych z tablicy // zniszczenie sesji return; } } ?>
No, wszystko bardzo fajnie. Teraz tylko pojawia problem. używam funkcji:
<?php public function defaultAction() { $this->sendToView($_VGL, 'news'); load('sessions/class.sessions.php'); $session = Session::instance(); $this->drawSite(); $kopia = $session->get_session_copy(); } ?>
I niby powinienem otrzymać jako kopię to co było wcześniej, a jako sesję to co jest teraz. Tak się jednak nie dzieje i obydwa czasy są takie same. Czym może być to spowodowane? Dodam tylko że kiedy przed zadeklarowaniem sesji daję echo czas jest prawidłowy. Wygląda na to że podczas każdego przypisania sesji tablica kopi się zmienia, jakby była referencją zmiennej
