Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrocic czas dzialania sesji...
Forum PHP.pl > Forum > PHP
adeq_PL
Witam!!

Hmm.. widze, ze zainteresowanie moim poprzednim tematem (http://forum.php.pl/index.php?showtopic=40840) jest takie sobie... Ale moze to was troche ruszy do dzialania.

Kiedy wlaczam przegladarke wyskakuje okienko logowania i jest ok. Wpisuje login haslo jesli dobrze to przechodze do odpowiedniej podstrony. Nastepnie daje "Wyloguj" i wtedy wracam do pulpitu logowania i tu sie pojawia problem bo kiedy daje w przegladarce cofnij to sie mi wyswietla info ze ta podstrona stracila waznosc, ale kiedy daje odswierz pojawia sie mi znow strona, ktora powinna byc widoczna tylko po zalogowaniu. I dopiero kiedy wylacze przegladarke i wlacze na nowo to dopiero znow ta chroniona czesc jest niedostepna...

Jak tego uniknac? Co mam dodac w kodzie?

Aha i jeszcze niekiedy mam widoczny sid w okienku adresowym...

Da sie o jakos usunac?

Slyszaszalem, ze ciastka sa dobrym sposobem na zabezpieczenie strony, tylko nie bardzo wiem na czym to polega...

Moglby mi ktos wyjasnic jak w moim kodzie moglbym wykorzystac ciastka?
tiraeth
Jeżeli twoja przeglądarka ma wyłączoną obsługę COOKIES to identyfikator sesji (domyślnie) przetrzymywany jest w pasku adresu i przesyłany GET'em. Możesz włączyć obsługę cookies, wtedy identyfikatora sesji nie będzie w pasku adresu, będzie on pobierany z COOKIES'ów.

Jeżeli po wylogowaniu się, używasz session_destroy() to sesja jest usuwana z katalogu serwera, inaczej sesja ta pozostaje. Serwer ma funkcję Garbage Collector, który usuwa sesje nie zaktualizowane przez ostatnie, bodajże, 24 godziny. Jeżeli w ciągu tych 24 godzin, ktoś przejmie identyfikator niewylogowanego użytkownika to jest niebezpieczeństwo przejęcia kontroli nad aplikacją. Można tego uniknąć, jeżeli użytkownik ma włączone ciastka w przeglądarce, wtedy wyciągnięcie identyfikatora sesji będzie nieco trudniejsze. Wtedy sesja przepada w momencie zamknięcia przeglądarki, więc identyfikatora już nie wyciągniesz, wtedy po 24 godzinach Garbage Collector usuwa tą sesję.

Ewentualnie można skorzystać z własnego mechanizmu przetrzymywania sesji, co daje większe bezpieczeństwo, tj. możesz sprawdzać czy IP jest identyczne z tym, którego użyto podczas przetwarzania skryptu logowanie, czy identyfikator przeglądarki jest ten sam itd. Artykułów na temat tworzenia własnego Session Handlera jest wiele w internecie (nawet na php.pl jest) więc radzę zapoznać się z nimi smile.gif
adeq_PL
Ale przeciez ja mam napisana funkcje unset($_SESSION['logadm']); , ktora jest odpowiednikiem session_destroy(); , pomimo to i tak dajac cofnij i odswierzajac strone pojawia sie mi zastrzezona zawartosc.

  1. <?php
  2. include('conf_adm.php');
  3.  
  4.  
  5.   if(isset($_POST['logadm'])) {
  6.  
  7.   $dane = @mysql_query('SELECT login, password FROM admin WHERE login = "'.$_POST['loginadm'].'" AND password= "'.$_POST['passadm'].'"') or die(mysql_error()); 
  8.     
  9.     
  10.     if(mysql_num_rows($dane) == 1) {
  11.         $_SESSION['logadm'] = 'ok';
  12.     } 
  13.         else {
  14.         $_SESSION['logadm'] = '<P class=blad>Błędny login lub hasło!';
  15.     }
  16.     
  17.     unset($_POST['logadm']);
  18.   }
  19.  
  20.  
  21.   if(isset($_POST['unlogadm'])) {
  22.  
  23.    // w tym miejscu jest funcja kasujaca sesje    
  24.  
  25.     unset($_SESSION['logadm']);
  26.     
  27.     //unset($_POST['unloaddm']);
  28.   }
  29.  
  30.  
  31.  
  32.  
  33. function logadm() {
  34.  
  35.     
  36.     if($_SESSION['logadm'] == 'ok') {
  37.  
  38.  
  39.     $string  = '<form action="'.getenv(REQUEST_URI).'" method="post">';
  40.         $string .= '    <input type="submit" name="unlogadm" value="Wyloguj" />';
  41.        $string .= '</form>';
  42.        
  43.     } 
  44.  
  45.  
  46.         else {
  47.     $string  = '<form action="'.getenv(REQUEST_URI).'" method="post">';
  48.        $string .= '    <ul style="list-style-type: none; margin: 0; padding: 0;">';
  49.        
  50.  
  51.  
  52.        if(isset($_SESSION['logadm']))
  53.  
  54.         $string .= '<li>'.$_SESSION['logadm'].'</li>';
  55.        $string .= '<li><P class=normal>Login: <input type="text" name="loginadm" style="width: 130px"/></li>';
  56.        $string .= '<li><P class=normal>Haslo: <input type="password" name="passadm" style="width: 130px"/></P></li>';
  57.        $string .= '<li><input type="submit" name="logadm" value="Logowanie" /></li>';
  58.        $string .= '</ul>';
  59.        $string .= '<BR><TABLE align=center class=haslo CELLPADDING="0" CELLSPACING="0"><TR><TD  ALIGN=center>';
  60.         $string .= '<a href=admin_instal_adm.php>instalacja bazy</A>&nbsp;';
  61.        $string .= '</TD><TD ALIGN=center><P class="title">|</P>';
  62.     $string .= '</TD><TD ALIGN=center>&nbsp;<a href=admin_instal_adm.php>help</A>';
  63.     $string .= '</TD></TR></TABLE>';
  64.     $string .= '</form>';
  65.  
  66.  
  67.  
  68.         }
  69.     
  70.     return $string;
  71.     
  72. }
  73.  
  74.  
  75. ?>


Czy to prawidlowa reakcja przegladarki?


OK Juz nie aktualne! Zrobilem tak, ze nie wyswietla zakaznej zawartosci.
Nie wiem jak to sie stalo ale wystarczylo zmienic :

Kod
    $string  = '<form action="'.getenv(REQUEST_URI).'" method="post">';
        $string .= '    <input type="submit" name="unlogadm" value="Wyloguj" />';
       $string .= '</form>';


na

Kod
$string .= '<A name="unloginst" href='.getenv(REQUEST_URI).'>wyloguj</A>';

i wszystko gra guitar.gif
mike
Cytat(adeq_PL @ 2006-01-26 20:02:29)
Ale przeciez ja mam napisana funkcje unset($_SESSION['logadm']); , ktora jest odpowiednikiem session_destroy();

Jesteś w błędzie.

Sesja a dane jakie ona przechowuje to dwie różne rzeczy.
Możesz usunąć wszelkie dane z sesji (za pomocą unset()) ale to nadal będzie ta sama sesja.

Sesję zakończysz uzywając session_destroy() (od razy skasujesz dane, które trzymała)
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-2025 Invision Power Services, Inc.