Home > PHP > Sesje, mod_rewrite i trochę PHP

Sesje, mod_rewrite i trochę PHP

Czasami niestety zachodzi konieczność, przechowywania identyfikatora sesji w adresie URL. Ostatnio troszkę częściej – za sprawą nowych wymysłów w IE i problemu z ramkami. Dawno, dawno temu, gdy wymyślono ciasteczka, okazało się, że nie wszyscy je lubią. Niektóre języki programowania WWW umożliwiały więć przechowywanie ciasteczka (identyfikatora sesji) w adresie URL. I tak na przykład PHP, po wprowadzeniu zmian w konfiguracji:
session.use_cookies 1
session.use_only_cookies 0
session.use_trans_sid 1
url_rewriter.tags "a=href,area=href,frame=src,input=src,form=,fieldset="
przed wypluciem strony modyfikuje wszystkie linki znajdujące się na stronie doklejając identyfikator sesji jako parametr zapytania. To działa, ale nie zawsze. Gdy na stronie jest dużo JavaScriptu, konieczne jest inne rozwiązanie. Proponuję coś takiego: 1. Modyfikukejemy adres URL, ale zamiast parametrów modyfikujemy ścieżkę, np.:
index.php?PHP_Session=XXX
/PHP_Session.XXX/index.php
Możemy to zrobić na przykład poprzez Header( "Location: ..." ); 2. Piszemy odpowiednie regulu dla mod rewrite:
RewriteEngine On
RewriteRule ^(.*)(PHP_Session\.([^/]+))/(.*)/(.*) $1$4/$5 [L]
RewriteRule ^(.*)(PHP_Session\.([^/]+))/(.*) $1$4?PHP_Session=$3&%{QUERY_STRING} [L]
oraz wyłączamy niepotrzebne już nam trans_sid. I to wszystko. Dzięki temu nasz identyfikator sesji będzi wisiał jako część adresu URL. Paskudne (patrz XSS), ale czasami nie da się zrobić nic lepszego.
Categories: PHP Tags:
  1. No comments yet.
  1. No trackbacks yet.

Subscribe without commenting