Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SESSION] usuwanie plików sesji
Forum PHP.pl > Forum > PHP
Black-Berry
Jak działa w PHP usuwanie plików sesji? Kiedy są usuwane pliki sesyjne i wegług jakich kryteriów? Czy za każdym razem kidy odpalamy jakiś skrypt php sprawdza czas modyfikacji tych plików i usuwa np te starsze niż pół godziny?

Pisze mechanizm sesji oparty o klucz COOKIE i pliki. Nie bardzo mam sie na czym wzorować. W manualu nic nie pisze.
akurczyk
Polecał bym ci zrobić tak jak wcześniej pisałem w db i odpalać crona (jeśli masz go na serwie) co np 3200 sekund żeby wywalić wiersze które są starsze niż 1600 sekund. a na początku strony umieść kod który będzie aktualizować wiersze (zmieniać w wierszu czas na aktualny). W ten sposób zyszkasz time outy a baza nie będzie zaśmiecona.
PS: Jeśli znasz c to pobierz źrudła parsera php i przeczytaj jak działa funkcja session_start.
Black-Berry
Napisałem procedury usuwające pliki sesji. Nie używam bazy danych żeby jej nie obciążać. Czas wykonywania usunięcia niekatywnych plików to tylko 1ms i chyba nie będę z tym duzo kombinował. Myślę ze wykonam ją przy każdym pierwszym wejściu użytkownika na stronę. Czy to dobry pomysł? Crone wydaje się być za dużym problemem bo trzeba go ustawiać zewnętrznie.
akurczyk
piszesz cmsa?questionmark.gif
jeśli tak to cron odpada
może nie na tylko na stronie głównej tylko na wszystkich podstronach.
a zaszada usuwania jest taka sama w przypadku plików jak i bazy.
ale jeśli ustawisz czas na 1s to ktoś kto przegląda stronę może nie zdążyć kliknąć w link i timeout:) polecam ci jednak ustawic na 1600 albo 3200.
ps: nie zapomnij też o weryfikacji przeglądarki, systemu itp. tak jak jest to ze zwykłymi sesjami w php.
Black-Berry
Nie na 1s smile.gif Czas trwania procedury usuwającej niepotrzebne pliki wynosi 1ms smile.gif A usuwać chcę nie na 1 stronei ale za kanym 1 uruchomieniu systemu przez użytkownika. Jeśli ktoś wchodzi na 15 podstron to procedura usuwająca niepotrzebne pliki sesyjne wykona się tylo przy 1 podstronie a później już nie żeby niepotrzebnie nie obciążać systemu.
Cytat
ps: nie zapomnij też o weryfikacji przeglądarki, systemu itp. tak jak jest to ze zwykłymi sesjami w php.
Co masz na myśli? nie weryfikuje przeglądarki. Jak działa to w php?
akurczyk
puźniej ci odpowiem bo ide na działkę będę za ok 3200s:)
Shili
Przy weryfikacji przeglądarki zmniejszasz ryzyko zdobycia sesji. Teraz nie wystarczy samo pobranie identyfikatora, ale również użycie dokładnie takiej samej przeglądarki, systemu operacyjnego jak ofiara kradzieży.
Black-Berry
Jest jakiś unikatwy identyfikato przeglądarki który się zazwyczaj używa czy chodzi tylk o wersję no firefox ?
Shili
Popróbuj sobie coś takiego pod różnymi przeglądarkami (a także systemami, jeśli masz). Na przykład winksmiley.jpg
  1. <?php
  2. echo $_SERVER['HTTP_USER_AGENT'];
  3. ?>


Zawsze możesz się jeszcze zapoznać z taką funkcją: get_browser" title="Zobacz w manualu PHP" target="_manual
Black-Berry
A czy sprawdzać raem z przeglądarka również IP ?
Shili
To zależy już tylko od Ciebie. Jeśli zamierzasz robić coś w stylu "zapamiętaj mnie" to musisz brać pod uwagę ludzi ze zmiennym ip, tak samo przy długim czasie ważności sesji. To już trzeba sobie samemu przekalkulować i przemyśleć pod kątem serwisu jaki tworzysz.
akurczyk
radził bym ci również zakodować w md5 session_id (numeryczne) wtedy będzie trudniej znaleść inną sesje przy przechwytywaniu.
Black-Berry
nie no jasne. Id sessji musi być zakodowane. Klucze mam mniej więcej takiej postaci: 6f7526eaefda6ef170b56919e222d0c3oJniYe

No dobra. Mam już sesję działającą na plikach.
  • Pliki zapisują się z rozszerzeniem do którego nie ma dostępu przeglądarka (blokada w .htaccess)
  • Ciecha generują się po czasie i losowej wartosci a następnie są kodowane
  • Złodziej ciastek zostanie wykryty po zmiennej $_SERVER['HTTP_USER_AGENT']
  • pliki sesji są automatycznie usuwane po 30 minutach jesli nie są aktualizowane
Czy o czymś zapomniałem ?
akurczyk
chyba tak: jeśli do generowania id sesji masz taki kod: md5(range()) to id może się powtarzać.
Black-Berry
A takie coś się może powtórzyć?
  1. <?php
  2. $sessionId = encrypt(time(0,999999)*rand()).random_string(6);
  3. ?>
akurczyk
jest bbbbbbbbbbbbbbbbbaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrddddddddddddddddddddddzzzzzzzzzz
zzzzzzzzzzzzzzzzooooooooooooooo małe prawdopodobieństwo ale jednak że ktoś będzie miał fatra i w ciągu tej samej mikto sekundy się zaloguje i wylosuje akurat taki sam kod. polecam sprawdzić czy takie id już nie istnieje.
Black-Berry
heh. Fakt. Może lepiej sprawdzić.
akurczyk
może taki kod:
  1. <?php
  2. $kod = md5(time());
  3. for($i=0; $i=1; $i++) {
  4. if(/*jeżeli wygenerowany kod jest już używany*/) {
  5. $kod = md5($kod);
  6. $i=0
  7. }
  8. }
  9. echo $kod;
  10. ?>
Black-Berry
Z generowaniem i sprawdzaniem dam sobie już radę winksmiley.jpg To nie problem jaikiś.
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.