Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> poprawne wylogowanie z aplikacji
morrison
post 25.01.2007, 14:13:39
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


witam,

zrobiłem aplikacje, ale mam jeszcze problem z poprawnym wylogowaniem usera. otoz usuwam sesje poprawnie, ale gdy user sie wyloguje to kiedy wciska wstecz w przegladarce(raz w IE lub kilka razy w firefox) to udaje mu sie wrocic do autoryzowanej strony i zobaczyc zawartosc. co prawda gdy prubuje wtedy kkliknac cos to wyrzuca go z powrotem do strony wylogowania. ale i tak jest zle.

jaki jest sposob zeby usunac z przegladarki te dane aby juz nie mogl ich zobaczyc user po wylogowaniu?


--------------------
Go to the top of the page
+Quote Post
wipo
post 25.01.2007, 15:07:09
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


Trzeba wyczyścić cache w przeglądarce


--------------------
Go to the top of the page
+Quote Post
morrison
post 25.01.2007, 15:18:11
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


wydaje sie sluszne, ale jak to mozna zrobic?


--------------------
Go to the top of the page
+Quote Post
wipo
post 25.01.2007, 15:21:29
Post #4





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


Zdalnie to zdaje mi się że się nie da


--------------------
Go to the top of the page
+Quote Post
morrison
post 25.01.2007, 15:33:18
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


jest wiele komercyjnych aplikacji w php np. gdzie zostal rozwiazany ten problem. pytanie wiec: jak to zrobic?


--------------------
Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 15:42:50
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(morrison @ 25.01.2007, 15:33:18 ) *
jest wiele komercyjnych aplikacji w php np. gdzie zostal rozwiazany ten problem. pytanie wiec: jak to zrobic?

W aplikacji, którą pisałem nie mogłem pozwolić na nieautoryzowany dostęp. Problem rozwiązałem w następujący sposób. Na początku pliku z kontrolerem wywołuję plik:
  1. <?php
  2. require_once('verify.php');
  3. ?>


Zawartość pliku verify:
  1. <?php
  2.  
  3. //**************************************************
  4. //** Skrypt weryfikujący zalogowanie w systemie
  5. //**************************************************
  6.  
  7. require_once('function.php');
  8. require_once('config.inc.php');
  9.  
  10.  
  11.  
  12. // JEŚLI NIE ISTNIEJE SESJA UŻYTKOWNIKA TO POWRÓT NA STRONĘ LOGOWANIA
  13. if ( (!isset($_SESSION['LOGIN'])) && (!isset($_SESSION['HASLO'])) )
  14. {
  15. ?>
  16. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  17. <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" xml:lang="pl">
  18.  
  19. <head> 
  20. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  21. <meta http-equiv="Content-language" content="pl" />
  22. <meta name="Description" content="Firma X" />
  23. <meta name="Author" content="Sebastian Sowiński" />
  24. <meta name="Robots" content="all" />
  25. <meta name="Pragma" content="no-cache" />
  26. <meta name="Cache-Control" content="no-store, no-cache, must-revalidate" />
  27. <link rel="stylesheet" href="css/authorization.css" type="text/css" />
  28.  
  29. <title>DOSTĘP WZBRONIONY</title>
  30. </head>
  31. <body>
  32.  
  33. <div id="log">
  34. <img class="stop" src="img/stop.gif" width="83px" height="83px" alt="Stop" name="Stop" border="0" />
  35. <p class="brakautoryzacji">Nie masz uprawnień !</p>
  36. </div>
  37.  
  38. </body>
  39. </html>
  40.  
  41. <?php
  42. // Logowanie operacji
  43. if ( $trybLogowania > 0 ) dodajLog($sciezkaDoPlikuZlogami,'SYSTEM','Możliwa próba obejścia zabezpieczeń - nieudana weryfikacja !!!');
  44.  
  45. echo '<META HTTP-EQUIV='Refresh' CONTENT='4; URL=index.php'>';
  46. exit();
  47. }
  48. ?>


Sprawdza się znakomicie.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
morrison
post 25.01.2007, 15:48:04
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


hm. rozumiem ze ten kod:
  1. <?php
  2. echo '<META HTTP-EQUIV='Refresh' CONTENT='4; URL=index.php'>';
  3. exit();
  4. ?>


rozwiazuje caly problem. sprawdze jak tylko bede mogl,dzieki!:)


--------------------
Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 15:54:38
Post #8





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(morrison @ 25.01.2007, 15:48:04 ) *
hm. rozumiem ze ten kod:
  1. <?php
  2. echo '<META HTTP-EQUIV='Refresh' CONTENT='4; URL=index.php'>';
  3. exit();
  4. ?>


rozwiazuje caly problem. sprawdze jak tylko bede mogl,dzieki!:)



Zamień exit() na die(); winksmiley.jpg
W pliku index.php jest kod odpowiedzialny za autoryzację. Tzn formularz itp.. Najważniejsze jest to, że jak sprawdzisz, że sesja nie istnieje to przekierowujesz.
pzdr


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
morrison
post 25.01.2007, 21:18:38
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


zrobilem cos takiego, ale nie dziala:
  1. <?php
  2. /* sprawdza za kazdym wykonaniem czy w ostatnich 10min user korzystal z aplikacji
     jesli nie to nastepuje automatyczne wylogowanie
  3.  * jesli user sie dopiero zalogowal to pobiera nazwe i haslo, jesli jest juz zal
    ogowany to sprawdza czy dane sa poprawne
  4.  * ustawia czas waznosci sesji
  5.  */
  6. function check_login() {
  7.  
  8. //sprawdzamy i ustawiamy czas waznosci sesji
  9. $_SESSION['intTimeoutSeconds'] = 600; //ustaw sekundy do timeout'u 600 = 10min
  10. if(isset($_SESSION['intLastRefreshTime'])) {
  11. if(($_SESSION['intLastRefreshTime'] + $_SESSION['intTimeoutSeconds']) < time()) {
  12. print '<META HTTP-EQUIV="Refresh" CONTENT="5"; URL="logout.php">';
  13. header('Location: logout.php');
  14. }
  15. }
  16. $_SESSION['intLastRefreshTime'] = time();
  17.  
  18. //utworzenie krotkich nazw zmiennych i spr. czy dane sa przek. w zm. sesji
  19. if (!isset($_SESSION['user_name']))
  20. $_SESSION['user_name'] = @$_POST['user_name'];
  21. if (!isset($_SESSION['password_']))
  22. $_SESSION['password_'] = @$_POST['password_'];
  23.  
  24. // jesli uzytkownik znajduje sie w bazie danych rejestracja identyfikatora
  25. if (loguj($_SESSION['user_name'], $_SESSION['password_'])) {
  26. $_SESSION['uwierz_uzyt'] = $_SESSION['user_name'];
  27. //sprawdzenie czy zalogowany posiada prawa admina czy zwyklego usera
  28. $connect = lacz_bd();
  29. $query = "select admin from cms_users where user_name='".$_SESSION['user_name']."'";
  30. $result = mysql_query($query, $connect);
  31. $_SESSION['admin'] = mysql_result($result, 0, 0);
  32.  
  33. } else { // nieprawidlowe logowanie
  34. print '<META HTTP-EQUIV="Refresh" CONTENT="5"; URL="logout.php">';
  35. header('Location: logout.php');
  36. exit();
  37. }
  38.  
  39. session_register('czas_zalogowania_test');
  40. if($_SESSION['czas_zalogowania_test'] == false){
  41. session_register('czas_zalogowania');
  42. $_SESSION['czas_zalogowania'] = date("H:i:s a");
  43. $_SESSION['czas_zalogowania_test'] = true;
  44. }
  45.  
  46. }
  47. ?>

ogolnie moze to nie pasuje do mojego skryptu...


--------------------
Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 21:35:17
Post #10





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


<OT>Po co używasz znaku małpy w zapisach:
  1. <?php
  2. $_SESSION['password_'] = @$_POST['password_'];
  3. ?>
:]</OT>


Ja w swoim skrypcie sprawdzam czy w sesji istnieje zapisany login i hasło. Jeśli tak - użytkownik jest zalogowany. Jeśli nie - wylogował się. Jeśli się wylogował (czyt. w zmiennej sesyjnej nie ma zapisanego loginu i hasła) to jeśli próbuje się dostać do innych podstron/akcji/plików jest kierowany na stronę logowania (po krótkim czasie na przeczytanie "brak dostępu" etc.).
W funkcji, którą podałeś nie dopatrzyłem się żebyś to sprawdzał w sposób, który podałem niżej.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
morrison
post 25.01.2007, 22:09:32
Post #11





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 24.05.2004
Skąd: krakow

Ostrzeżenie: (10%)
X----


@ - uzywam poniewaz gdy za pierwszym razem wykonuje sie ta funkcja, czyli kiedy user wysyla formularz z loginem i haslem to wtedy do zmiennych podstawiaja sie te dane. potem gdy juz sa ustawione te zmienne i nie ma nic w POST @ powoduje ze nie wyswietla sie notice z brakiem wartosci w POST.

moja funkcja "loguj" sprawdza za kazdym razem uwierzytelnienie w bazie.

natomiast to:
  1. <?php
  2. print '<META HTTP-EQUIV="Refresh" CONTENT="5"; URL="logout.php">';
  3. ?>

nie powoduje u mnie przejscia do wskazanej strony, lecz caly czas przeladowuje sie pusta strona.

byc moze to ze podstawiam dane z POST do hasla i loginu zawsze kiedy te zmienne sesyjne sa puste powoduje ze przegladarka wchodzi wstecz do autoryzowanej strony...? no ale tak juz to skonstruowalem. pytanie co powinienem poprawic


--------------------
Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 23:05:42
Post #12





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Przyjrzyj się jeszcze raz jak ja to zrobiłem.
  1. <?php
  2. if ( (!isset($_SESSION['LOGIN'])) && (!isset($_SESSION['HASLO'])) )
  3. {
  4. //tutaj jakiś komunikat...
  5. echo '<META HTTP-EQUIV='Refresh' CONTENT='4; URL=index.php'>';
  6. die();
  7. }
  8. ?>

Ja podczas logowania ustawiam zmienne sesyjne LOGIN i HASŁO i tylko je sprawdzam, bo jeśli istnieją tzn że użytkownik jest zalogowany. W tym co Ty podałeś można się pogubić. Teraz nie mam za bardzo czasu ale jutro sobie ten kod sformatuje i oblukam. Ewidentnie masz gdzieś błąd.. U mnie naciskanie przycisku wstecz nic nie da ba za każdym razem na samym początku skryptu sprawdzane jest czy istnieje sesja jeśli nie to jest przekierowywany na stronę logowania. W ten sposób też nie obejdziesz logowania (nie odpalisz ręcznie żadnej podstrony systemu bez hasła bo dostaniesz ostrzeżenie i zobaczysz stronę logowania - sprawdzano winksmiley.jpg)


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
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 - 10:20