Archive for the ‘Zend Framework’ Category

Zend_Auth rememberMe

Sunday, May 8th, 2011

Trochę się namęczyłem przy tym(1,5h) dlatego że nie wgłębiałem się nigdy w zasadę działania Zend_Session i dlatego że skopiowałem bezmyślnie kod z jakiegoś przykładu, który prawie działał.

Zend_Session to bardzo fajna klasa, nie dość że łatwo się używa to dodatkowo wprowadza metody które rozszerzają możliwości standardowej sesji php. Do rzeczy jak zrobić zapamiętaj mnie wykorzystując Zend_Auth.

Żeby tego dokonać trzeba wiedzieć że Zend wprowadza dodatkowy mechanizm który pozwala na ustawienie czasu życia konkretnego Zend_Session_Namespace poprzez metodę setExpirationSeconds($seconds, $variables = null). Można też po podaniu nazw zmiennych w danym namespace ustawić wygaśnięcie tylko dla nich. Czyli pierwszy krok to ustawienie czasu życia sesji dla klasy Zend_Auth czyli np.

$session = new Zend_Session_Namespace(‘Zend_Auth’);
$seconds  = 60 * 60 * 24 * 7; // 7 dni
$session->setExpirationSeconds($seconds);

Ale to jeszcze nie wszystko, bo sesja w php trwa jedynie tyle ile określa parametr session.cookie_lifetime, który jest ustawiony w php.ini i najczęściej przyjmuje wartość 0 co oznacza że ciasteczko, które przechowuje identyfikator sesji straci ważność po zamknięciu okna przeglądarki.  Parametr ten możemy zmienić we wspomniamym wyżej php.ini, .htaccess, lub używając metody ini_set lub funkcji php session_set_cookie_params albo korzystając z metody klasy Zend_Session::rememberMe – która jako parametr pobiera liczbę sekund.
Należy pamiętać żeby zrobić to przed zaczęciem korzystania z sesji. Ja np. ustawiłem to w application.ini: phpSettings.session.cookie_lifetime = 604800.

Błąd który popełniłem na początku i który zmusił mnie do przejrzenia źródeł Zend_Session i Zend_Session_Namespace było  skopiowanie kodu z jakiegoś przykładu w którym parametr sessions.cookie_liftime był ustawiany po wykonaniu logowania. Co było w tym złego? To że używając w innych miejscach sesji parametr sessions.cookie_liftime był standardowo ustawiany na 0 co powodowało usunięcie pliku cookie po zamknięciu okna przeglądarki. Nie od razu to skojarzyłem bo nie na każdej podstronie używałem dodatkowo sesji.

Zend mode rewrite

Monday, September 22nd, 2008
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} -s [OR]
  3. RewriteCond %{REQUEST_FILENAME} -l [OR]
  4. RewriteCond %{REQUEST_FILENAME} -d
  5. RewriteRule ^.*$ - [NC,L]
  6. RewriteRule ^.*$ index.php [NC,L]

ad.1 RewriteEngine On – włącza silnik manipulacji adresem.

ad.2

RewriteCond – to warunek dla następnej reguły RewriteRule. Składa się z testowanego ciągu znaków i wzorca. Jeśli ciąg pasuje do wzorca reguła zostanie wykonana. Zapis tego typu
%{ZMIENN_SERWERA} – odwołuje się do stałych. W tym przypadku
%{REQUEST_FILENAME} – oznacza pełną ścieżkę dostępu do pliku pasującą do  adresu. Druga część czyli wzorzec jest wyrażeniem regularnym, z pewnymi rozszerzeniami.  Tu mamy ‘-s’ – testuje czy podana nazwa jest istniejącym plikiem z rozmiarem większym od 0. [OR] – oznacza logiczne OR. Brak tego parametru oznacza że bierzący warunek z następnym jest łączony logicznie przez AND.

ad.3

%{REQUEST_FILENAME} -l – oznacza sprawdzenie czy testowana nazwa pliku jest linkiem symbolicznym.

ad.4

%{REQUEST_FILENAME} -d – oznacza sprawdzenie czy testowana nazwa pliku jest katalogiem.

ad.5 RewriteRule – to fragment kodu, który zamieni adres, lub jego część na coś innego. Pierwszy parementr to wzorzec(wyrażenie regularne) do którego będzie dopasowany adres a drugi to wartość na którą zostanie zamieniony. RewriteRule ^.*$ – [NC,L] – wzorzec może być dowolnym ciągiem znaków, drugi paremetr “-” oznacza  – nie dokonuj żadnych zmian w adresie. Co w naszym przypadku ma sens. Flagi [NC, L] – oznaczają NC- ignorowanie dużych liter, L – zakończ proces zmian adresu na tej regule.

ad. 6. RewriteRule ^.*$ index.php [NC,L] – wszystko co nie pasowało do reguły powyżej, zamień na index.php i zakończ.

Tylko nie home.pl

Sunday, September 21st, 2008

Napotkałem 2 problemy publikując stronę opartą o Zend na serwerach home.pl

  • Nie można sięgnąć poza katalog na który wskazuje domena. Problem ten łatwo obejść, ale nie jest fajnie jeśli ktoś narzuca jakiś schemat, a po drugie lubię robić tak jak zaleca Zend, a przez home.pl trzeba było z tego zrezygnować.
  • Druga niemiła sprawa to automatyczne obcinanie slash w adresie url. W przypadku zakodowania zmiennych w postaci kontroler/akcja/zmienna/wartosc_zmiennej, gdy wartosc zmiennej jest równa NULL adres ma postać następującą kontroler/akcja/zmenna//druga_zmienna/druga_wartosc. Po obcieciu podwójnych slashy, zmienna przyjmuje wartość druga_zmienna i aplikacja się sypie.

Nie polecam home.pl. Na nazwa.pl zawsze wszystko pięknie śmiga i zawsze można sobie wszystko ustawić jak trzeba.

A jednak nie do końca, ostatnio dwie rzeczy, które mnie zdenerwowały w nazwa.pl

  • memory_limit ustawione na 64MB, bez możliwości zwiększenia(Pan w powiedział że to dla bezpieczeństwa. Wszystko pięknie ale aplikacja się sypie).
  • Nie można aż z tak dużą dokładnością jak na home.pl skonfigurować krona.