Normalnie w PHP do przechowywania danych związanych z sesją, używa się tablicy globalnej $_SESSION. Okazuje się jednak, że w przypadku frameworka Yii, do sesji odwołuje się w nieco inny sposób.
Klasyczne przypisanie wartości do tej tablicy nic nie da, albowiem zostanie ona nadpisana przez Yii jego zawartością. Twórcy tego framework’a przyjęli, zresztą słusznie, że najlepszą alternatywą, będzie przechowywanie sesji w bazie danych.
Instalacja
Aby rozpocząć pracę z sesją, należy korzystać z dowolnego mechanizmu składowania danych używanego przez Yii , następnie w głównym pliku konfiguracyjnym, jako jeden z elementów, dodać następujący fragment kodu:
session'=>array( 'class' => 'CDbHttpSession', 'connectionID' => 'db', 'sessionTableName' => 'dbsession', ),
Gotowe! Framwork samodzielnie utworzy niezbędną tabelę ‚dbsession’ w bazie danych, do której prowadzi połączenie, którego ID podano w konfiguracji.
Jak używać?
Od tego momentu, tablica z sesją dostępna jest przez wywołanie Yii::app()->session. Ponieważ dostępny jest zarówno setter jak i getter, do dowolnego elementu możemy odwoływać się przez klucz: Yii::app()->session[‚klucz’], oraz przypisywać dowolną wartość: Yii::app()->session[‚klucz’] = „wartość”.
3 odpowiedzi na “YiiFramework: Obsługa mechanizmu sesji”
Fajne rozwiązanie, ale ja słyszałem, że wiele firm robi tak, że hacker00000je Yii i używa sesji jak się im tylko podoba – np. jest taka jedna wielka korporacja w bielsku, ale nie mogę podać jej nazwy, bo by mnie Jolaos zniszczył !
„Ponieważ dostępny jest zarówno setter jak i getter, do dowolnego elementu możemy odwoływać się przez klucz: Yii::app()->session[‚klucz’], oraz przypisywać dowolną wartość: Yii::app()->session[‚klucz’] = „wartość”.”
Jaki setter i getter?
To jest zwykła ‚funkcja’ php’a.
@Crackcomm
W przypadku, gdyby to była zmienna prywatna, metoda „magiczna” __set / __get, wyrzuciła by błąd o tym fakcie. Standardowo w php’cu > 5.x, są one zaimplementowane dla właściwości, ale nic nie stoi na przeszkodzie, żeby je nadpisać i nieco zmienić „zachowanie”.
W niektórych językach, standardowo nie są one implementowane, stąd moja zwrócenie uwagi na to.