id - liczba porządkowa auto increment,
name - nazwa sesji
times - ostatni czas wykonywania działań
filename - plik w którym się znajdujemy (index.php, config.php)
user - id użytkownika (0 - gość, powyższe liczby to identyfikatory konta)
ip - ip na którym została utworzona sesja.
I napisałem kod PHP:
$timeSession = $config["TimeSession"]; $session_ip = get_ip(false); $sess['user'] = 0; // sesja gościa { $file = FileName; $sQuery = mysql_query("SELECT times, filename, user FROM Session WHERE name = '$session_id' and ip = '$session_ip'"); if ($sWhile == 0) { mysql_query("INSERT INTO Session (name, times, filename, user, ip) VALUES ('$session_id', '$timeSession', '$file', '0', '$session_ip')"); } else { if ($session['times']<$config['TimeSession']) { $timeSession = $config["TimeSession"]; mysql_query("UPDATE Session SET times='$timeSession', filename='$file' WHERE name = '$session_id' and ip = '$session_ip'"); $sess = mysql_fetch_assoc(mysql_query("SELECT times, filename, user FROM Session WHERE name = '$session_id' and ip = '$session_ip'")); } else { mysql_query("INSERT INTO Session (name, times, filename, user, ip) VALUE ('$session_id', '$timeSession', '$file', '0', '$session_ip')"); } } }
TimeSession:
// Czas Sesji $config["TimeSession"] = TIME_NOW+$config['TimeSession'];
Działanie kodu wygląda następująco. Na początku skrypt usuwa stare sesje gdzie czas przekroczył dozwolony limit trwania sesji (czas ustawiony przez administratora). Następnie skrypt pobiera nazwę sesji oraz ip od użytkownika, po czym sprawdza czy istnieje sesja w bazie danych z pobranymi parametrami (ip oraz nazwa sesji). Jeżeli nie istnieje taka sesja to tworzy taką sesje w bazie danych, jeżeli jednak istnieje to przydziela identyfikator który został wpisany do bazy. Początkowo user nie jest zalogowany przez co $sess['user'] wynosi 0, dlatego podczas poprawnego logowania następuje update tabeli "user" na identyfikator konta z pasującym loginem i hasłem wpisanym przez użytkownika.
I tutaj pytanie mam do doświadczonych użytkowników: czy moje główkowanie w celu zabezpieczenia się przed Session Hijacking da jakiś odpowiedni skutek, czy napisałem niepotrzebne pobieranie sesji z bazy danych?