<?php require_once('common.php'); $user_id = ($sessiond_logged_in) ? $userdata['user_id'] : 0; $sql = "DELETE FROM `sessions` WHERE (session_time + 300) < ".$time.""; if ( !$session_logged_in ) { $sql = "SELECT * FROM `sessions` WHERE session_ip = '".$user_ip."' AND session_user_id = 0"; if ( $num == 0 ) { $sql = "INSERT INTO `sessions` (`session_id`, `session_user_id`, `session_start`, `session_time`, `session_ip`, `session_page`) VALUES ('".generate_id()."', 0, '".$time."', '".$time."', '".$user_ip."', 0)"; } } else if ( $session_logged_in ) { $sql = "SELECT * FROM `sessions` WHERE session_ip = '".$user_ip."' AND session_user_id = ".$user_id.""; if ( $num == 0 ) { $sql = "INSERT INTO `sessions` (`session_id`, `session_user_id`, `session_start`, `session_time`, `session_ip`, `session_page`) VALUES ('".generate_id()."', ".$user_id.", '".$time."', '".$time."', '".$user_ip."', 0)"; } $sql = "SELECT * FROM `sessions` WHERE session_user_id = ".$user_id." AND session_ip = '".$user_ip."'"; if ( $num == 0 || $time > ($row['session_time'] + 300) ) { } } ?>
Na samym początku usuwam z marszu wszystkie przedawnione sesje. Później, na samym końcu pliku sprawdzam czy dany user ma swoją sesję w bazie. Jeśli nie to jest równoznaczne z tym, że powyższe zapytanie usunęło jego sesję,czyli była ona przedawniona, czyli ma go wylogować. Problem jest taki, że przed tym zapytaniem, które ma zniszczyć sesję, dodaję insertem sesje ;/ Po co? A no po to, że jeśli user się zaloguje to ma wpisać jego sesję do bazy. Wniosek? Sesja się nigdy nie usunie, bo nawet jeśli zapytanie ją usunie, bo jest przedawniona, zapytanie poniżej ją doda. Można niby zrobić tak, że zapytanie dodające sesję, dodam pod warunkiem niszczącym sesje. Ale co mi z tego jak wtedy user nowo zalogowany będzie miał $num == 0 czyli nigdy się nikt nie zaloguje. Nie mam też jak bezpośrednio po zalogowaniu dodać sesji do bazy danych bo po prostu mnie loguje, f5 i już jestem wylogowany. Jakaś rada, jak to ugryźć?
OK, mam

