Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: session handler gubi zmienne sesji
Forum PHP.pl > Forum > PHP
Mlodycompany
Witam. Mam taką o to klasę do obsługi sesji korzystająca z session handlera
  1. <?php
  2. class Sessions{
  3. private $SID = null;
  4. private function __clone(){}
  5. private static $instance = false; //zmienna instancji klasy
  6. protected $savePath;
  7. protected $sessionName;
  8.  
  9. public static function getInstance() {
  10. if (!self::$instance) {
  11. self::$instance = new sessions();
  12. }
  13. return self::$instance;
  14. }
  15.  
  16. public function __construct() {
  17. array($this, "open"),
  18. array($this, "close"),
  19. array($this, "read"),
  20. array($this, "write"),
  21. array($this, "destroy"),
  22. array($this, "gc")
  23. );
  24. session_name('test');
  25.  
  26. }
  27. /*SESSION HANDLER*/
  28. public function open($savePath, $sessionName) {
  29. $this->savePath = $savePath;
  30. $this->sessionName = $sessionName;
  31. return true;
  32. }
  33.  
  34. public function close() {
  35. // your code if any
  36. return true;
  37. }
  38.  
  39. public function read($id) {
  40. // your code
  41. return '';
  42. }
  43.  
  44. public function write($id, $data) {
  45. // your code
  46. return true;
  47. }
  48.  
  49. public function destroy($id) {
  50. // your code
  51. return true;
  52. }
  53.  
  54. public function gc($maxlifetime) {
  55. // your code
  56. return true;
  57. }
  58. /*END SESSION HANDLER*/
  59. private function generateSID(){
  60. return ($this->SID = md5(md5(uniqid(mt_rand(),1)).microtime().$_SERVER['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].serialize($_SERVER)))?true:false;
  61. }
  62.  
  63. public function set($name, $val, $namespace = null){
  64. if($namespace == null){
  65. return $_SESSION[$name] = $val;
  66. }
  67. else{
  68. return $_SESSION[$namespace][$name] = $val;
  69. }
  70. }
  71. public function get($name, $namespace = null){
  72. if($namespace == null){
  73. return (isSet($_SESSION[$name])) ? $_SESSION[$name] : false;
  74. }
  75. else{
  76. return (isSet($_SESSION[$namespace][$name])) ? $_SESSION[$namespace][$name] : false;
  77. }
  78. }
  79. public function getAll($namespace = null){
  80. if($namespace == null){
  81. return (isSet($_SESSION)) ? $_SESSION : false;
  82. }
  83. else{
  84. return (isSet($_SESSION[$namespace])) ? $_SESSION[$namespace] : false;
  85. }
  86. }
  87. }
  88. ?>

Nie jest to jeszcze skończona klasa a już jest jeden poważny problem. Session handler gubi zmienne sesji. Zmienne są widoczne tylko na stronie na której są definiowane, po przeładowaniu już ich nie ma. Jak usunę session handlera to działa bez zarzutów. Wiecie może w czym tkwi problem?

PS. Szukałem na forum i znalazłem post w którym jest link do wpisu w manualu, lecz niestety już go nie ma
zend
To jest cała klasa? Jeśli tak to się nie dziw że dane są gubione skoro ich ani nigdzie nie zapisujesz... sleep.gif Poza tym czemu handler sesji jest singletonem? Jeśli zajdzie potrzeba zmiany drivera to jak masz zamiar to zrobić?
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.