Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrocic czas dzialania sesji...
adeq_PL
post 26.01.2006, 17:08:23
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 25.01.2006
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


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?

Ten post edytował adeq_PL 26.01.2006, 17:12:53


--------------------
Wszystko powinno zostać uproszczone tak bardzo, jak to tylko możliwe, ale nie bardziej. - Albert Einstein
Go to the top of the page
+Quote Post
tiraeth
post 26.01.2006, 17:42:18
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
adeq_PL
post 26.01.2006, 20:02:29
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 25.01.2006
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


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

Ten post edytował adeq_PL 26.01.2006, 21:54:56


--------------------
Wszystko powinno zostać uproszczone tak bardzo, jak to tylko możliwe, ale nie bardziej. - Albert Einstein
Go to the top of the page
+Quote Post
mike
post 26.01.2006, 22:18:22
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 04:28