Witam.
Czy ktoś już może pisał albo gdzie spotkał skrypt który automatycznie wyloguje użytkownika po jakimś czasie bezczynności ?
<? class Session { var $p; /** * Dane konfiguracyjne bazy danych * @var array $config Ustawiane przez konstruktor @see session(); * @access public */ var $config; /** * Tabela z danymi sesyjnymi * @var array $session_table Ustawiana przez konstruktor @see session(); * @access public */ var $session_table; /** * Maksymalny czas istnienia nieaktywnej sesji * @var array $session_table Ustawiana przez konstruktor @see session(); * @access public */ var $session_lifetime; /** * Konstruktor * Ustalanie parametrów i przygotowywanie środowiska pod funkcjonowanie klasy * @param string $config Dane konfiguracyjne bazy * @param string $session_table Tabela z danymi sesyjnymi * @param string $session_lifetime Maksymalny czas istnienia nieaktywnej sesji @default 0 * @return void * @access public */ function session($config = '', $session_table, $session_lifetime = 0) { // Ustalanie danych konfiguracyjnych bazy $this->config['DBHost'] = $config['DBHost']; $this->config['DBUser'] = $config['DBUser']; $this->config['DBPass'] = $config['DBPass']; $this->config['DBName'] = $config['DBName']; $this->config['persistent'] = $config['persistent']; } // Ustawianie tabeli $this->session_table = $session_table; } /** * Nawiązywanie połączenia bazodanowego * @return bool * @access public */ function connection() { $connect_type = $this->config['persistent'] ? 'mysql_pconnect' : 'mysql_connect'; $connect = $connect_type($this->config['DBHost'], $this->config['DBUser'], $this->config['DBPass']) or Die("Nieee"); $this->p = $connect; if ($connect && $db_select) { return true; } else { return false; } } /** * Inicjalizacja sesji * @param string $sesion_savepath Lokalizacja zapisu sesji * @param string $session_name Nazwa sesji * @return bool * @access private */ function _open($session_savepath, $session_name) { if($this->config != null) { // Nawiązywanie połączenia $this->connection(); } return true; } /** * Zakończenie sesji * @return bool * @access private */ function _close() { $this->_gc($this->session_lifetime); return true; } /** * Odczytywanie danych sesyjnych * @param string $session_id Identyfikator sesji * @return mixed * @access private */ function _read($session_id) { $sql_query = "SELECT session_value FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'"; $session_value = $row['session_value']; return $session_value; } else { return false; } } /** * Zapisywanie danych sesyjnych * @param string $session_id Identyfikator sesji * @param string $session_value Wartości sesyjne * @return bool * @access private */ function _write($session_id, $session_value) { $sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time, session_value) VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ", '" . $session_value . "')"; if ($result) { return true; } else { $sql_query = "UPDATE " . $this->session_table . " SET session_time = " . $session_time . ", session_value = '" . $session_value . "' WHERE session_id = '" . $session_id . "'"; if ($result) { return true; } else { return false; } } } /** * Usuwanie danych sesyjnych * @param string $session_id Identyfikator sesji * @return bool * @access private */ function _destroy($session_id) { $sql_query = "DELETE FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'"; if ($result) { return true; } else { return false; } } /** * "Garbage collection" - Usuwanie niepotrzebnych danych sesyjnych * @param in $session_lifetime Identyfikator sesji * @return bool * @access private */ function _gc($session_lifetime) { $sql_query = "DELETE FROM ".$this->session_table." WHERE session_time < ".time() - $session_lifetime; if ($result) { return true; } else { return false;} } } ?>
<?php // Tworzenie obiektu zarządzania sesją /** * Nazwa tabeli, w której przechowywane są dane sesyjne */ $session_table = "session"; /** * Czas trwania sesji po upływie którego nieaktywne sesje zostają * usunięte */ $session_lifetime = 300; // Tworzenie obiektu zarządzania sesją $session = new Session($config, $session_table, $session_lifetime); // Zastępowanie domyślnych funkcji metodami sesji // Zaczynamy sesje i sprawdzamy, czy ktos nie probuje podrobic identyfikatora sesji albo go nie ukradl ?>
<?php function Login() { // Usuwanie sessi // Obliczamy nasz skomplikowany hash hasla i pobieramy nazwe uzytkownika $Pass = $this->GenerateHash($_POST['password']); // Sprawdzamy czy takowy istnieje, jesli tak - logujemy $query = sprintf("SELECT `id`,`typ`,`login`,`ost_logowanie`,`ip`,`nr_karty`,`licznik` FROM `uzytkownicy` WHERE `login` = '%s' AND `haslo` = '%s' LIMIT 0,1", $Username, $Pass); $result = $SQL->Query($query); if ($SQL->Rows($result) > 0) { $data = $SQL->DBArray($result); //Zwiekszanie licznika $data['licznik']++; // Uaktualniamy ostatnie logowanie i IP SET `ost_logowanie` = CURRENT_TIMESTAMP, `ip` = '%s',`licznik`= %s WHERE `login` = '%s' AND `haslo` = '%s' AND `id` = %s", $_SERVER['REMOTE_ADDR'],$data['licznik'], $Username, $Pass, $data['id']); $SQL->Query($query); // Informujemy system, ze uzytkownik sie zalogowal... $_SESSION['zalogowany'] = true; } else { $error = "Niepoprawne dane!"; } } ?>
Array ( [inicjuj] => 1 [ip] => 217.97.185.6 [UserData] => Array ( [id] => 1 [typ] => a [login] => admin [ost_logowanie] => 2009-03-05 19:53:58 [ip] => 217.97.185.6 [nr_karty] => 0 [licznik] => 112 ) [zalogowany] => 1 )
<?php ?>