Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sesje] Problem z SessWrite
Forum PHP.pl > Forum > PHP
Kamil J.
  1. <?php
  2. require_once(DIR."core/class/class.Cookie.php");
  3. class Session
  4. {
  5. private static $instance;
  6.  
  7. private $_sessionID;
  8. private $_session_lifetime = 3600;
  9. private $_table_name;
  10. private $_Data;
  11.  
  12. private $_userID;
  13.  
  14.  
  15.  
  16. private function __construct()
  17. {
  18. $this->_table_name = SQL_PREFIX.'sessions';
  19.  
  20. $Cookie = Cookie::singleton();
  21.  
  22. session_set_save_handler (array(&$this, "_session_open_method"), array(&$this, "_session_close_method"), array(&$this, "_session_read_method"), array(&$this, "_session_write_method"), array(&$this, "_session_destroy_method"), array(&$this, "_session_gc_method"));
  23.  
  24. }
  25.  
  26. function __destruct()
  27. {
  28. }
  29.  
  30. public function set($key, $value)
  31. {
  32. $this->_Data[$key] = $value;
  33. }
  34.  
  35.  
  36. public function __clone() 
  37. {
  38. trigger_error('Clone is not allowed.', E_USER_ERROR);
  39. }
  40.  
  41.  
  42. public static function singleton() {
  43. if (!isset(self::$instance)) {
  44.  $c = __CLASS__;
  45.  self::$instance = new $c;
  46. }
  47. return self::$instance;
  48. }
  49.  
  50.  
  51.  
  52. private function _session_open_method($save_path, $session_name)
  53. {
  54. return true;
  55. }
  56. public function _session_close_method()
  57. {
  58. return true;
  59. }
  60. public function _session_gc_method($maxlifetime)
  61. {
  62. return true;
  63. }
  64. public function _session_read_method($session_id)
  65. {
  66. $this->_sessionID = $session_id;
  67. $db = Database::singleton();
  68.  
  69. $this->_deleteOldSessions();
  70.  
  71. $sql = "SELECT `user_id`, `vars` FROM `".$this->_table_name."` WHERE `phpsession_id` = '".$this->_sessionID."';";
  72. $row = $db->getRow($sql);
  73.  
  74. if($row)
  75. {
  76. $this->_Data = unserialize($row['vars']);
  77. $this->_userID = $row['user_id'];
  78. }
  79. else // jesli nie ma rekordu w bazie
  80. {
  81. $sql = "INSERT INTO `".$this->_table_name."` (`phpsession_id`, `user_id`, `vars`, `date_created`) VALUES ('".$this->_sessionID."', '".$this->_userID."', '', NOW());"; 
  82. $db->Execute($sql); // wstawia rekord z sesja do bazy
  83.  
  84.  
  85. }
  86.  
  87. $_SESSION =& $this->_Data;
  88. return '';
  89. }
  90.  
  91. public function _session_write_method($session_id, $session_data='')
  92. {
  93. foreach ($this->_Data as $k => $v)
  94. {
  95. $this->_Data[$k] = addslashes($v);
  96. }
  97. $data = serialize($this->_Data);
  98.  
  99. $sql = "UPDATE `".$this->_table_name."` SET `last_active` = now(), `vars`='".$data."' , `user_id`='".$this->_userID."' WHERE `phpsession_id` = '".$this->_sessionID."' LIMIT 1;";
  100. $db = Database::singleton();
  101. $db->Execute($sql);
  102. return true;
  103. }
  104.  
  105. public function _session_destroy_method($session_id)
  106. {
  107. $sql = "DELETE FROM `".$this->_table_name."` WHERE `phpsession_id` = '".$session_id."';";
  108. //Data::singleton()->add("sql", $sql);
  109. $db = Database::singleton();
  110. $db->Execute($sql);
  111.  
  112. Cookie::singleton()->delete('PHPSESSID');
  113. $this->_sessionID = false;
  114. $this->_dbID = false;
  115. $this->_userID = false;
  116. return true;
  117. }
  118.  
  119.  
  120.  
  121. private function _deleteOldSessions()
  122. {
  123. $sql = "DELETE FROM `".$this->_table_name."` WHERE (now() - `date_created`) >= '".$this->_session_lifetime."';";
  124. $rs = Database::singleton()->getRow($sql);
  125.  
  126. return true;
  127. }
  128.  
  129. public function setUserID($uid)
  130. {
  131. $this->_userID = $uid;
  132. }
  133.  
  134. public function getUserID()
  135. {
  136. return ($this->_userID) ? $this->_userID : false;
  137. }
  138.  
  139. }
  140. ?>


Mam z tym pewnien, problem. Gdy mam to na webservie - php 5.1.5, wszystko działa poprawnie zapisuje dane w bazie, odczytuje.

Jak wrzuciłem na serwer z php 5.1.6 to też wszystko działa z wyjątkiem jednej rzeczy - write. Nie wiem o co chodzi, męcze się już z tym od 2h. Poczytałem trochę forum i manuala i dodałem nast rzeczy: __destruct, która zamyka i zapisuje sesje(problem z php >= 5.0.5) oraz dodawanie slashy. Lecz nadal to nie działa sad.gif

Doszedłem do wniosku, że on wogóle nie wywołuje tej funkcji write.

Z góry dziękuje za pomoc.

Pozdrawiam, Kamil
ciapek888
offtopic.gif
takie pytanie do wszystkich:
Chce wam się analizować tak duży fragment kodu?
bo mi nie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.