Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Sesja] Sesja ginie w eterze przy przekazaniu obektu sesji przez referencje
Forum PHP.pl > Forum > PHP
deirathe
Na poczatek troszke kodu:
Klasa sesji
  1. <?php
  2. class Session_Container
  3. {
  4.    public $sessionData;
  5.    private $expire;
  6.    private $creationTime;
  7.    public function __construct()
  8.    {
  9.        $this->creationTime = time();
  10.    }
  11.    public function __get($name)
  12.    {
  13.        if($this->expire)
  14.        {
  15.            if($this->expire>=time())
  16.                return $this->sessionData[$name];
  17.        }
  18.        else
  19.        {
  20.            return $this->sessionData[$name];
  21.        }
  22.        return false;
  23.    }
  24.    public function __set($name,$value)
  25.    {
  26.        $this->sessionData[$name] = $value;
  27.    }
  28.    public function Expire($seconds)
  29.    {
  30.        $this->expire = time() + (int) $seconds;
  31.    }
  32.    public function RegisterNS($name)
  33.    {
  34.        $this->$name = new Session_Container();
  35.        return $this->$name;
  36.    }
  37. }
  38. class Session
  39. {
  40.    private $vars;
  41.    private $Db;
  42.    private $dbTable;
  43.    private static $sid;
  44.    private static function Start()
  45.    {
  46.        
  47.        session_start();
  48.        session_regenerate_id();
  49.        self$sid = session_id();
  50.        
  51.    }
  52.    public function __construct(Db $Db,Configuration $Configuration)
  53.    {
  54.        
  55.        if($Configuration->application->session->storage == "db")
  56.        {
  57.            $this->dbTable = $Configuration->application->container;
  58.            $this->Db = $Db;
  59.        
  60.        }    
  61.        if(!self$sid)
  62.            selfStart();
  63.        $this->vars = &$_SESSION['vars'];
  64.        if(get_class($_SESSION['vars'])!="Session_Container")
  65.        {
  66.            
  67.            $this->vars = new Session_Container();
  68.        }
  69.    }
  70.    public function __get($name)
  71.    {
  72.        return $this->vars->$name;
  73.    }
  74.    public function __set($name,$value)
  75.    {
  76.        $this->vars->$name = $value;
  77.    }
  78.    public function RegisterNS($name)
  79.    {
  80.        $this->vars->$name = new Session_Container();
  81.        return $this->vars->$name;
  82.    }
  83. }
  84. ?>

klasa modulu:
  1. <?php
  2. abstract class Module
  3. {
  4.    public $Configuration;
  5.    public $Db;
  6.    public $Session;
  7.    public $Global;
  8.    public $Template;
  9.  
  10.    public function __construct($moduleName)
  11.    {
  12.        $this->Configuration     = new Configuration(Application$cnf->paths->configuration);
  13.        $this->Template         = new Template();
  14.        
  15.        $this->Global            = new Session($this->Db,$this->Configuration);
  16.        $this->Session            = $this->Global->RegisterNS($moduleName);
  17.        $this->__preload();
  18.        
  19.    }
  20.    abstract public function __preload();
  21.    abstract public function __default();
  22.    abstract public function __denied($method);
  23.    abstract public function Supervised();
  24.    abstract public    function __error($e);
  25. }
  26. ?>

Objasnienie problemu:
Gdy w klasie modulu uzywam zmiennej Global to sesja sie zapisuje i dziala swietnie, gdy natomiast uzywam zmiennej Session to juz nie:/.
Moze ktos mi pomoc uruchomic ta machine?
vokiel
Może zmienne klasy definiuj jako protected a nie public.
deirathe
ale tu chodzi o sesje ktora ginie gdzies w eterze a nie o poziomy dostepu, a tak poza tym to jak bede wtedy dziedziczyc te zmienne?? ja ich potrzebuje
vokiel
  1. <?php
  2. //w 50linii masz literówke
  3. self$sid = session_id();
  4. // powinno być
  5. self$sid = session_id();
  6. ?>


Czemu w klasie Session oraz Session_Container masz funkcję: RegisterNS($name), czemu to ma służyć?
deirathe
Nie literowka tylko forum ucielo, jak to Czemu?questionmark.gif Tworzy obiekt Session_Container i moge na nim ustawic keidy on wygasnie itd... Logiczne... Problem gasnacej sesji jest wazniejszy jak masz jakas koncepcje to podziel sie prosze

Jakiekolwiek pomysly bo juz probowalem chyba wszystkiego i nic nie pomaga sad.gif
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.