Black-Berry
14.09.2008, 12:27:41
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
14.09.2008, 13:46:48
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
14.09.2008, 13:53:37
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
14.09.2008, 13:59:50
piszesz cmsa?

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
14.09.2008, 14:19:50
Nie na 1s

Czas trwania procedury usuwającej niepotrzebne pliki wynosi 1ms

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
14.09.2008, 14:26:33
puźniej ci odpowiem bo ide na działkę będę za ok 3200s:)
Shili
14.09.2008, 14:27:45
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
14.09.2008, 14:32:04
Jest jakiś unikatwy identyfikato przeglądarki który się zazwyczaj używa czy chodzi tylk o wersję no firefox ?
Shili
14.09.2008, 14:36:38
Popróbuj sobie coś takiego pod różnymi przeglądarkami (a także systemami, jeśli masz). Na przykład

<?php
echo $_SERVER['HTTP_USER_AGENT']; ?>
Zawsze możesz się jeszcze zapoznać z taką funkcją:
get_browser" title="Zobacz w manualu PHP" target="_manual
Black-Berry
14.09.2008, 14:40:55
A czy sprawdzać raem z przeglądarka również IP ?
Shili
14.09.2008, 14:43:45
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
14.09.2008, 16:01:42
radził bym ci również zakodować w md5 session_id (numeryczne) wtedy będzie trudniej znaleść inną sesje przy przechwytywaniu.
Black-Berry
14.09.2008, 16:33:44
nie no jasne. Id sessji musi być zakodowane. Klucze mam mniej więcej takiej postaci:
6f7526eaefda6ef170b56919e222d0c3oJniYeNo 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
14.09.2008, 16:44:18
chyba tak: jeśli do generowania id sesji masz taki kod: md5(range()) to id może się powtarzać.
Black-Berry
14.09.2008, 18:24:38
A takie coś się może powtórzyć?
<?php
$sessionId = encrypt
(time(0
,999999
)*rand()).random_string
(6
); ?>
akurczyk
14.09.2008, 18:35:12
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
14.09.2008, 18:41:33
heh. Fakt. Może lepiej sprawdzić.
akurczyk
14.09.2008, 18:52:25
może taki kod:
<?php
for($i=0; $i=1; $i++) {
if(/*jeżeli wygenerowany kod jest już używany*/) {
$i=0
}
}
?>
Black-Berry
14.09.2008, 18:53:56
Z generowaniem i sprawdzaniem dam sobie już radę

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.