Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problemy z kopią sesji...
MWL
post
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

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


Witam. zrobiłem sobie taką klasę, która pomagać mi będzie w zarządzaniu sesją:
  1. <?php
  2. defined('ACCESS') or die('Access to this file is forbidden.');
  3.  
  4. class Session {
  5.  
  6. // Dane
  7. private $copy; // Kopia zapasowa sesji
  8.  
  9. // Zmienne logiczne
  10. private static $instance = NULL; // Singleaton
  11.  
  12. private function __construct() {
  13.  // start sesji
  14.  // sprawdzenie czy użytkownik był już na stronie (czy ciasko z numerem IP istnieje)
  15.  // jeżeli nie zmienna sesji REMOTE_ADDR otrzyma wartość numeru IP komputera który korzysta ze strony
  16.  // jeżeli zmienna już istnieje i nie jest równa aktualnemu adresowi IP to możliwe jest iż sesja została przechwycona.
  17.  // w takim przypadku w celu bezpieczeństwa uruchomiona zostaje metoda destroy.
  18.  if(!isset($_SESSION['REMOTE_ADDR'])) {
  19.   $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
  20.  } elseif($_SESSION['REMOTE_ADDR'] !== $_SERVER['REMOTE_ADDR']) {
  21.   $this->destroy();
  22.  }
  23.  $this->send_session_data();
  24. }
  25.  
  26. private function send_session_data() {
  27.  $this->copy = $_SESSION;
  28. }
  29.  
  30. public function get_session_copy() {
  31.  return $this->copy;
  32. }
  33.  
  34. /**
  35.   * Instancja (singleaton)
  36.   *
  37.   * Funkcja pobiera używaną instację klasy lub tworzy nową jeśli nie istnieje
  38.   *
  39.   * @access public
  40.   * @param void
  41.   * @return instance
  42.   */
  43.  
  44. public static function instance() {
  45.  if(!self::$instance instanceof self)
  46.  self::$instance = new self;
  47.  return self::$instance;
  48. }
  49.  
  50. /**
  51.   * Niszczenie sesji
  52.   *
  53.   * Funkcja ustawia pustą tablicę jako wartość sesji, a następnie całkowicie ją niszczy.
  54.   *
  55.   * @access public
  56.   * @param void
  57.   * @return instance
  58.   */
  59.  
  60. public function destroy() {
  61.  // usunięcie wszystkich zmiennych z tablicy
  62.  $_SESSION = array();
  63.  // zniszczenie sesji
  64.  return;
  65. }
  66.  
  67. }
  68.  
  69. ?>


No, wszystko bardzo fajnie. Teraz tylko pojawia problem. używam funkcji:
  1. <?php
  2. public function defaultAction() {
  3.  $_VGL = array(array('name'=>'Test'), array('name'=>'Test'), array('name'=>'Test'));
  4.  $this->sendToView($_VGL, 'news');
  5.  load('sessions/class.sessions.php');
  6.  $session = Session::instance();
  7.  $this->drawSite();
  8.  $kopia = $session->get_session_copy();
  9.  $_SESSION['abc'] = time();
  10.  echo 'Zmienna która wcześniej miała postać: '.$kopia['abc'];
  11.  echo ' obecnie ma wartość: '.$_SESSION['abc'];
  12. }
  13. ?>

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 (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) . Tylko pytanie, jakim cudem? macie pomyły?

Ten post edytował MWL 23.11.2008, 19:59:35
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.09.2025 - 08:48