Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa do obsługi $_SESSION
Forum PHP.pl > Forum > Przedszkole
uirapuru
Nie wiem, na ile to rozsądne rozwiązanie, ale pomiędzy moje klasy Uzytkownik i Profil, a przede wszystkim Mainframe (po nazwach mam nadzieje ze domyslacie sie do czego sluza) chce wprowadzic jedna warstwe, ktora bedzie posredniczyc pomiedzy nimi a sesją. Probuje to napisac, ale mam wrazenie, ze mam klopot z kilkoma jej instancjami. po wylogowaniu powinno byc session_destroy(), ale zostaje mi jedna zmienna w sesji wciąż (czas, kiedy sie polaczylismy ostatnio). Ładować sie w tym przypadku w Singleton (widziałem, że odradzają go wszyscy).

druga sprawa, że jakbym nie kombinował to
  1. <?php
  2. function test()
  3.    {
  4.        if(session_id()=="")
  5.        {
  6.            return false;
  7.        }
  8.        else
  9.        {
  10.            return true;
  11.        }    
  12.    }
  13. ?>


ZAWSZE zwraca true
Zyx
Owszem, są głosy, że singleton to głupota, ale jakoś nikomu nie przeszkadza powszechne jego stosowanie. Singletona znajdziesz w bardzo dużej liczbie projektów, m.in. takiego kalibru, jak Zend Framework...

Jeśli chodzi o kod, to jeśli masz aktywną sesję, nigdy nie zwróci Ci on wartości pustej. Kiedy sesja jest tworzona, dostaje losowy identyfikator (lub wzięty z URL-a) i wtedy zawsze dostaniesz ten identyfikator.
uirapuru
próbuję zaimplementować tego singletona w Sesja, dam znać.

co do test to tak, wiem, o to właśnie chodzi; test() ma za zadanie zwracac true jesli sesja istnieje (tzn ze is_session() niej jest rowne "") i odwrotnie w drugim przypadku. tyle, że to nie działa!

zdesperowany już ograniczam klase do czegos takiego tylko:

  1. <?
  2. class Sesja
  3. {
  4.    private static $instance;
  5.    private function __clone(){} //Uniemozliwia utworzenie kopii obiektu
  6.  
  7.    public static function getInstance ()
  8.    {
  9.        if (self::$instance === null) {
  10.            self::$instance = new self();
  11.        }
  12.        return self::$instance;
  13.    }
  14.  
  15.    private function __construct()
  16.    {
  17.        if(!$this->test())
  18.        {
  19.            session_start();
  20.        }
  21.    }    
  22.  
  23.    function test()
  24.    {
  25.        if(session_id()=="")
  26.        {
  27.            return false;
  28.        }
  29.        else
  30.        {
  31.            return true;
  32.        }    
  33.    }
  34.    function destroy()
  35.    {
  36.        if($this->test())
  37.        {
  38.            $this->set("loggedin",false);
  39.            session_destroy();
  40.        }
  41.    }
  42.    function set($key,$val)
  43.    {
  44.        if($this->test())
  45.        {
  46.            $_SESSION[$key]=$val;
  47.        }
  48.    }
  49.    function get($key,$val)
  50.    {
  51.        if($this->test())
  52.        {
  53.            return $_SESSION[$key];
  54.        }
  55.    }    
  56. }
  57. ?>


czekam na uwagi,
peter13135
niestety nie jestem w stanie pomóc, ale mam pytanie ;]
Kod
   function get($key,$val)
    {
        if($this->test())
        {
            return $_SESSION[$key];
        }
    }


poco jest tutaj to $val questionmark.gif? z tego co widze to jest tylko używana zmianna $key
rzymek01
uirapuru, patrząc na tę klasę:

1. czy zamiast get nie powinno byc __get? (analogiczne w set)
2. tak jak @Zyx napisał, zawsze będzie fałszem: session_id()==""
zamiast session_destroy zrób tak (PHP >= 5.1)
session_regenerate_id(true); // usuwa starą sesję i przydziela nowy identyfikator

i ustaw jakąs swoja zmienna, że wylogowałes usera i po tej zmienej sprawdzaj smile.gif
uirapuru
@peter: faktycznie, po poscie sam to znalazlem i wywalilem

@rzymek: lamerskie pytanie, nie zajrzę do manuala biggrin.gif __get? a czym sie bedzie roznic w uzyciu od mojego wlasnego get() ?

dobra, fajny art o metodach magicznych winksmiley.jpg
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.