Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa do obsługi $_SESSION
uirapuru
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


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
Go to the top of the page
+Quote Post
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.
Go to the top of the page
+Quote Post
uirapuru
post
Post #3





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


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,
Go to the top of the page
+Quote Post
peter13135
post
Post #4





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? z tego co widze to jest tylko używana zmianna $key
Go to the top of the page
+Quote Post
rzymek01
post
Post #5





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
uirapuru
post
Post #6





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

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


@peter: faktycznie, po poscie sam to znalazlem i wywalilem

@rzymek: lamerskie pytanie, nie zajrzę do manuala (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) __get? a czym sie bedzie roznic w uzyciu od mojego wlasnego get() ?

dobra, fajny art o metodach magicznych (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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: 12.10.2025 - 03:33