Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sesje + baza danych -> własna obsługa
chaos_code
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.05.2007

Ostrzeżenie: (0%)
-----


Witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Mama zamiar zrobić obsługę sesji na mysql-u. Trochę poczytałem coś tam już wiem...
Ale naszła mnie taka refleksja. Czy koniecznie muszę korzystać z wbudowanego mechanizmu tj.
session_start, session_set_save_handler (open, write, gc, destroy,...), bo skoro i tak już muszę się w to bawić, czy nie lepiej od początku napisać samemu?

Może jest coś o czym nie wiem, a co daje przewagę standardowemu rozwiązaniu?

I przy okazji. Wiecie może jak generowane jest ID sesji. Wiem, że losowo, tylko czy jest to zwykły random (coś mi się obiło, ze nie do końca losuje liczby losowe - chyba w pascalu tak było) lub może jakiś bardziej zaawansowany algorytm?

Z góry dziękuję. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Void(Null)
post
Post #2





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 12.04.2007
Skąd: Błonie

Ostrzeżenie: (0%)
-----


Możesz użyć SUPER banalnej metody "trzymania sesji" która wygląda mniej więcej tak:

Najpierw określasz czas takiej niby sesji:

  1. <?php
  2. $SID_time = 900000;// 15 minut w milisekundach
  3. ?>


Przy rejestracji takiej sesji (np. podczas pierwszego logowania) korzystasz z takiej funkcji:

  1. <?php
  2. $SID = date("U");
  3. ?>


PHP tworzy za pomocą funkcji Date() uniksowy "odcisk chwili logowania" czyli zmienna $SID będzie zawierać liczbę sekund od Uniksowej epoki (od 1 stycznia 1970 00:00:00 GMT). Może wyglądać np tak:

  1. <?php
  2. $SID=1178746713
  3. ?>


Teraz sprawa polega na tym aby sprawdzić czy od czasu logowania nie upłyneło więcej czasu niż określiłeś w $SID_time. Np tak:

  1. <?php
  2. $check = date("U");
  3. if ($SID=="" OR $SID+$SID_time < $check ) {
  4. //Sesja zakończona
  5. }else{
  6. //Nie zakończona
  7. }
  8. ?>


Dalej - kod sprawdzania musisz wykonywać w każdym miejscu. Możesz do tego użyć include - jeśli nie wiesz co to, napisz.

Gdybyś zaś chciał utworzyć zmienną typu "token" (jak w phpMyAdmin) czyli ciąg różnych alfanumerycznych znaków możesz zrobić tak:

  1. <?php
  2. $token=md5(time())
  3. ?>


Działanie funkcji time jest podobne (szczegóły znajdziesz na
PHP.NET), funkcja md5 tworzy, na podstawie algorytmu RSA, taki właśnie token.

Pozdr
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 21:29