Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Auto wylogowanie po czasie
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
kilofmar
Witam.

Czy ktoś już może pisał albo gdzie spotkał skrypt który automatycznie wyloguje użytkownika po jakimś czasie bezczynności ?
wookieb
Nazywa się to session_handler o którym poczytasz na php.pl
No i tak naprawde nie nazywa sie to automatyczne wylogowanie tylko usuniecie sesji użytkownika którego od x czasu nie ma aktywnego na stronie.
kilofmar
A jak wykryć nieaktywność użytkownika ?
Jak bym to wiedział to sobie już poradzę dalej.
wookieb
A przeczytaj o session_handlerze to bedziesz wiedział.
.radex
za każdym odświerzeniem w sesji zapisujesz czas (time()), przy kolejnym odświerzeniu sprawdzasz czy

stary czas < time() - czas_w_sekundach_po_jakim_ma_wylogować

jeśli tak, wyloguj.
kilofmar
Znalazłem gotowy skrypt przedstawię go poniżej
  1. <?
  2.  
  3. class Session
  4. {
  5.    var $p;
  6.    /**
  7.     * Dane konfiguracyjne bazy danych
  8.     * @var array $config Ustawiane przez konstruktor @see session();
  9.     * @access public
  10.     */
  11.    var $config;
  12.    /**
  13.     * Tabela z danymi sesyjnymi
  14.     * @var array $session_table Ustawiana przez konstruktor @see session();
  15.     * @access public
  16.     */
  17.    var $session_table;
  18.    /**
  19.     * Maksymalny czas istnienia nieaktywnej sesji
  20.     * @var array $session_table Ustawiana przez konstruktor @see session();
  21.     * @access public
  22.     */
  23.    var $session_lifetime;
  24.    /**
  25.     * Konstruktor
  26.     * Ustalanie parametrów i przygotowywanie środowiska pod funkcjonowanie klasy
  27.     * @param string $config Dane konfiguracyjne bazy
  28.     * @param string $session_table Tabela z danymi sesyjnymi
  29.     * @param string $session_lifetime Maksymalny czas istnienia nieaktywnej sesji @default 0
  30.     * @return void
  31.     * @access public
  32.     */
  33.    function session($config = '', $session_table, $session_lifetime = 0)
  34.    {
  35.        if(!empty($config)){
  36.            // Ustalanie danych konfiguracyjnych bazy
  37.            $this->config['DBHost'] = $config['DBHost'];
  38.            $this->config['DBUser'] = $config['DBUser'];
  39.            $this->config['DBPass'] = $config['DBPass'];
  40.            $this->config['DBName'] = $config['DBName'];
  41.            $this->config['persistent'] = $config['persistent'];
  42.        }
  43.        // Ustawianie tabeli
  44.        $this->session_table = $session_table;
  45.    }
  46.    /**
  47.     * Nawiązywanie połączenia bazodanowego
  48.     * @return bool
  49.     * @access public
  50.     */
  51.    function connection() {
  52.        $connect_type = $this->config['persistent'] ? 'mysql_pconnect' : 'mysql_connect';
  53.        $connect = $connect_type($this->config['DBHost'], $this->config['DBUser'], $this->config['DBPass']) or Die("Nieee");
  54.        $this->p = $connect;
  55.        $db_select = mysql_select_db ($this->config['DBName']);
  56.        if ($connect && $db_select) { return true; } else { return false; }
  57.    }
  58.  
  59.    /**
  60.     * Inicjalizacja sesji
  61.     * @param string $sesion_savepath Lokalizacja zapisu sesji
  62.     * @param string $session_name Nazwa sesji
  63.     * @return bool
  64.     * @access private
  65.     */
  66.    function _open($session_savepath, $session_name)
  67.    {
  68.        if($this->config != null) {
  69.        // Nawiązywanie połączenia
  70.        $this->connection();
  71.        }
  72.        return true;
  73.    }
  74.    /**
  75.     * Zakończenie sesji
  76.     * @return bool
  77.     * @access private
  78.     */
  79.    function _close()
  80.    {
  81.        $this->_gc($this->session_lifetime);
  82.  
  83.        return true;
  84.    }
  85.    /**
  86.     * Odczytywanie danych sesyjnych
  87.     * @param string $session_id Identyfikator sesji
  88.     * @return mixed
  89.     * @access private
  90.     */
  91.    function _read($session_id)
  92.    {
  93.        $sql_query = "SELECT session_value
  94.        FROM " . $this->session_table . "
  95.        WHERE session_id = '" . $session_id . "'";
  96.        $result = @mysql_query($sql_query,$this->p);
  97.        if ($result && @mysql_num_rows($result) > 0) {
  98.            $row = mysql_fetch_array($result);
  99.            $session_value = $row['session_value'];
  100.            return $session_value;
  101.        } else {
  102.            return false;
  103.        }
  104.    }
  105.    /**
  106.     * Zapisywanie danych sesyjnych
  107.     * @param string $session_id Identyfikator sesji
  108.     * @param string $session_value Wartości sesyjne
  109.     * @return bool
  110.     * @access private
  111.     */
  112.    function _write($session_id, $session_value)
  113.    {
  114.        $session_start = time();
  115.        $session_time = time();
  116.        $sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time, session_value)
  117.        VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ", '" . $session_value . "')";
  118.        $result = @mysql_query($sql_query,$this->p);
  119.        if ($result) {
  120.            return true;
  121.        } else {
  122.            $sql_query = "UPDATE " . $this->session_table . "
  123.            SET session_time = " . $session_time . ", session_value = '" . $session_value . "'
  124.            WHERE session_id = '" . $session_id . "'";
  125.            $result = @mysql_query($sql_query,$this->p);
  126.            if ($result) {
  127.                return true;
  128.            } else {
  129.                return false;
  130.            }
  131.        }
  132.    }
  133.    /**
  134.     * Usuwanie danych sesyjnych
  135.     * @param string $session_id Identyfikator sesji
  136.     * @return bool
  137.     * @access private
  138.     */
  139.    function _destroy($session_id)
  140.    {
  141.        $sql_query = "DELETE FROM " . $this->session_table . "
  142.        WHERE session_id = '" . $session_id . "'";
  143.        $result = @mysql_query($sql_query,$this->p);
  144.        if ($result) {
  145.            return true;
  146.        } else {
  147.            return false;
  148.        }
  149.    }
  150.    /**
  151.     * "Garbage collection" - Usuwanie niepotrzebnych danych sesyjnych
  152.     * @param in $session_lifetime Identyfikator sesji
  153.     * @return bool
  154.     * @access private
  155.     */
  156.    function _gc($session_lifetime) {
  157.        $session_lifetime = time() - $this->session_lifetime;
  158.        $sql_query = "DELETE FROM ".$this->session_table." WHERE session_time < ".time() - $session_lifetime;
  159.        $result = @mysql_query($sql_query,$this->p);
  160.        if ($result) { return true; } else { return false;}
  161.    }
  162. }
  163. ?>


i ja wywołuje go tak zgodnie z przykładem jaki znalazłem

  1. <?php
  2. // Tworzenie obiektu zarządzania sesją
  3. /**
  4. * Nazwa tabeli, w której przechowywane są dane sesyjne
  5. */
  6. $session_table = "session";
  7. /**
  8. * Czas trwania sesji po upływie którego nieaktywne sesje zostają
  9. * usunięte
  10. */
  11. $session_lifetime = 300;
  12. // Tworzenie obiektu zarządzania sesją
  13. $session = new Session($config, $session_table, $session_lifetime);
  14. // Zastępowanie domyślnych funkcji metodami sesji
  15. session_set_save_handler (array(&$session, '_open'),array(&$session, '_close'),array(&$session, '_read'),array(&$session, '_write'),array(&$session, '_destroy'),array(&$session, '_gc'));
  16.  
  17. // Zaczynamy sesje i sprawdzamy, czy ktos nie probuje podrobic identyfikatora sesji albo go nie ukradl
  18. ?>



Zapisuje sessie do bazy MySql ale po zalogowaniu od razu mi niszczy sessie i wylogowuje mnie

mam taki skrypt logowania
  1. <?php
  2. function Login() {
  3.        global $SQL;
  4.        // Usuwanie sessi
  5.        unset($_SESSION['UserBad']);
  6.        unset($_SESSION['PassBad']);
  7.        // Obliczamy nasz skomplikowany hash hasla i pobieramy nazwe uzytkownika
  8.        $Pass = $this->GenerateHash($_POST['password']);
  9.        $Username = addslashes($_POST['username']);
  10.        
  11.        // Sprawdzamy czy takowy istnieje, jesli tak - logujemy
  12.        $query = sprintf("SELECT `id`,`typ`,`login`,`ost_logowanie`,`ip`,`nr_karty`,`licznik` FROM `uzytkownicy` WHERE `login` = '%s' AND `haslo` = '%s' LIMIT 0,1",
  13.                         $Username, $Pass);
  14.        $result = $SQL->Query($query);
  15.        if ($SQL->Rows($result) > 0) {
  16.            $data = $SQL->DBArray($result);
  17.            
  18.            //Zwiekszanie licznika
  19.            $data['licznik']++;
  20.            
  21.            // Uaktualniamy ostatnie logowanie i IP
  22.            $query = sprintf("UPDATE `uzytkownicy`
  23.                              SET `ost_logowanie` = CURRENT_TIMESTAMP, `ip` = '%s',`licznik`= %s
  24.                              WHERE `login` = '%s' AND `haslo` = '%s' AND `id` = %s",
  25.                              $_SERVER['REMOTE_ADDR'],$data['licznik'], $Username, $Pass, $data['id']);
  26.            $SQL->Query($query);
  27.            
  28.            
  29.            
  30.            
  31.            // Informujemy system, ze uzytkownik sie zalogowal...
  32.            $_SESSION['zalogowany'] = true;
  33.            
  34.                        
  35.        } else {
  36.            global $error;
  37.            $error = "Niepoprawne dane!";
  38.        }
  39.    }
  40. ?>


Po zalogowaniu jak wyświetlę wszystkie seesie to mam
  1. 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 )


ale jak próbuje wczytać jakiś plik który przed otwarciem sprawdza co jest w $_SESSION['zalogowany'] to sessi już nie ma w ogóle żadnej nie ma wszystkie są usunięte.












Napisałem prościej, napisałem tak

  1. <?php
  2. session_set_cookie_params(1800, '/test/');
  3. ?>
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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.