Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wylogowany, ale nie do końca.!?
Forum PHP.pl > Forum > PHP
rja
Witam, na jednej znanej stronie ze skryptami, jest bardzo prosty skrypt logowania oparty na sesjach.
Plik logowanie.php
  1. <?
  2. if ($_GET["login"]=="koniec") { // wylogowanie
  3.  
  4. }
  5.  
  6.  
  7. function istnieje($login, $haslo) {
  8. if ($login=="" or $haslo=="") return false;
  9. $baza = mysql_connect("localhost", "root", "haslo1");
  10. if ($baza) {
  11. $wynik = mysql_select_db("baza1");
  12. if ($wynik) {
  13. $wynik=mysql_query("SELECT * FROM m_ludzie WHERE
  14. m_name='$login' and m_haslo='$haslo'");
  15. if (mysql_num_rows($wynik)==1) return true;
  16. }
  17. mysql_close($baza);
  18. }
  19. return false;
  20. }
  21.  
  22.  
  23. if (istnieje($_POST["login"],$_POST["haslo"])) { // zalogowanie
  24. $_SESSION["zalogowany"]="tak";
  25. //$_SESSION["login"]=$_POST["login"];
  26. //$_SESSION["haslo"]=$_POST["haslo"];
  27.  
  28. }
  29.  
  30.  
  31. if ($_SESSION["zalogowany"]=="tak") {
  32. echo "czesc ".$_SESSION["login"];
  33. echo "<p><a href="{$_SERVER["PHP_SELF"]}?login=koniec">wyloguj się</a>";
  34. } else {
  35. echo "aby zalogować się, wypełnij formularz";
  36. echo '<form action="'.$_SERVER["PHP_SELF"].'" method="post">
  37. Login:<br /><input type="text" name="login" /><br />
  38. hasło:<br /><input type="text" name="haslo" /><br />
  39. <input type="submit" value="OK" />
  40. </form>';
  41. }
  42.  
  43. ?>

Plik index.php
  1. <? session_start(); ?>
  2.  
  3. <p>
  4. nag│owek strony, menu
  5. </p>
  6.  
  7.  
  8. <? include("logowanie.php"); ?>
  9.  
  10. <p>
  11. dalsza TAJNA treŠ g│ˇwnej strony...
  12. </p>
  13. <a href="index2.php">inna strona</a>

i plik index2.php
  1. <? session_start(); ?>
  2.  
  3. <p>
  4. nag│owek strony, menu
  5. </p>
  6.  
  7.  
  8. <? include("logowanie.php"); ?>
  9.  
  10. <p>
  11. dalsza TAJNA treŠ innej strony...
  12. </p>
  13. <a href="index.php">strona g│ˇwna</a>

Co do TAJNEJ części strony to widać ją, czy ktoś jest zalogowany czy też nie. Ale mniejsza o to.
Chodzi mi taką rzecz:
PO zalogowaniu się a następnie po wylogowaniu, kiedy cofam się przyciskiem WSTECZ w przeglądarce dochodzę do momentu kiedy mam komunikat : Otwierana strona zawiera dane POSTDATA.....". Po zatwierdzeniu OK, okazuje się że jestem zalogowany!!!.
Czego brakuje w tym skrypcie, aby nie dopuścić do takiego zdarzenia??
YagAA
  1. <?
  2. if ($_GET["login"]=="koniec") { // wylogowanie
  3.  
  4. }
  5. function istnieje($login, $haslo) {
  6. if ($login=="" or $haslo=="") return false;
  7. $baza = mysql_connect("localhost", "root", "haslo1");
  8. if ($baza) {
  9. $wynik = mysql_select_db("baza1");
  10. if ($wynik) {
  11. $wynik=mysql_query("SELECT * FROM m_ludzie WHERE
  12. m_name='$login' and m_haslo='$haslo'");
  13. if (mysql_num_rows($wynik)==1) return true;
  14. }
  15. mysql_close($baza);
  16. }
  17. return false;
  18. }
  19. if (istnieje($_POST["login"],$_POST["haslo"])) { // zalogowanie
  20. $_SESSION["zalogowany"]="tak";
  21. //$_SESSION["login"]=$_POST["login"];
  22. //$_SESSION["haslo"]=$_POST["haslo"];
  23.  
  24. }
  25. if ($_SESSION["zalogowany"]=="tak") {
  26. echo "czesc ".$_SESSION["login"];
  27. echo "<p><a href="{$_SERVER["PHP_SELF"]}?login=koniec">wyloguj się</a>";
  28. } else {
  29. echo "aby zalogować się, wypełnij formularz";
  30. echo '<form action="'.$_SERVER["PHP_SELF"].'" method="post">
  31. Login:<br /><input type="text" name="login" /><br />
  32. hasło:<br /><input type="text" name="haslo" /><br />
  33. <input type="submit" value="OK" />
  34. </form>';
  35. }
  36.  
  37. ?>


Zmień na

  1. <?
  2. if ($_GET["login"]=="koniec") { // wylogowanie
  3. $_SESSION = array(); 
  4. }
  5. function istnieje($login, $haslo) {
  6. if ($login=="" or $haslo=="") return false;
  7. $baza = mysql_connect("localhost", "root", "haslo1");
  8. if ($baza) {
  9. $wynik = mysql_select_db("baza1");
  10. if ($wynik) {
  11. $wynik=mysql_query("SELECT * FROM m_ludzie WHERE
  12. m_name='$login' and m_haslo='$haslo'");
  13. if (mysql_num_rows($wynik)==1) return true;
  14. }
  15. mysql_close($baza);
  16. }
  17. return false;
  18. }
  19. if (istnieje($_POST["login"],$_POST["haslo"])) { // zalogowanie
  20. $_SESSION["zalogowany"]="tak";
  21. //$_SESSION["login"]=$_POST["login"];
  22. //$_SESSION["haslo"]=$_POST["haslo"];
  23.  
  24. }
  25. if ($_SESSION["zalogowany"]=="tak") {
  26. echo "czesc ".$_SESSION["login"];
  27. echo "<p><a href="{$_SERVER["PHP_SELF"]}?login=koniec">wyloguj się</a>";
  28. } else {
  29. echo "aby zalogować się, wypełnij formularz";
  30. echo '<form action="'.$_SERVER["PHP_SELF"].'" method="post">
  31. Login:<br /><input type="text" name="login" /><br />
  32. hasło:<br /><input type="text" name="haslo" /><br />
  33. <input type="submit" value="OK" />
  34. </form>';
  35. }
  36.  
  37. ?>


I zobacz,czy będzie działało.
rja
NIe pomogło.
kriqs
jak dasz ok to sie zalogujesz ponownie sama przegladarka ci mowi ze wysle dane ponownie wiec tym samy sie zalogujesz smile.gif. tak mi sie wydaje smile.gif
sebik
kriqs ma racje, jezeli sie cofasz (tak samo jak odswiezasz po zalogowaniu) to wysylasz dane formularza ponownie, moze pokombinu cos w javascript (window.history.previous=" " czy cus takiego, moze by dzialalo)
Dandelion
a nie lepiej po wylogowaniu ustawic przekierowanie na strone glowna ?
rja
Wiem , że sama przeglądarka mi mówi że się ponownie zaloguje. Ale chodzi o to żeby przeglądarka nie pamiętała tych danych POSTDATA. Przecież jest wiele takich stron, gdzie cofanie się nie powoduje takiego zachowania przeglądarki. I dlatego chciałem wiedzieć jak to jest robione.
mokry
Kiedyś przeglądałem ten topic i dzisiaj podczas pisania nowej aplikacji przez przypadek rozwiązałem ten problem winksmiley.jpg

Podczas procesu logowania, użyj header() i przenieś użytkownika na jakąs stronę. Pomoże... Przynajmnije u mnie działa pod FF:
  1. ]
  2. <?
  3. //LOGOWANIE -START-
  4. if($action == "login") {
  5. $title = "Logowanie:";
  6. $login = stripslashes($_POST['login']);
  7. $password = stripslashes(md5($_POST['password']));
  8. $query = "SELECT id, login, haslo, poziom, imie, nazwisko FROM users WHERE login = '$login'";
  9. $wynik = mysql_query($query)or die(mysql_error($wynik));
  10. $row = mysql_fetch_array($wynik);
  11. if($row['haslo'] === $password) {
  12. $_SESSION['id'] = $row['id'];
  13. $_SESSION['zalogowany'] = 1;
  14. $_SESSION['poziom'] = $row['poziom'];
  15. $_SESSION['name'] = $row['imie']." ".$row['nazwisko'];
  16. $tresc = header('Refresh: 3; URL='index.php'')." <br/><b>Witaj ".$row['imie']."!</b><br/><br/>
  17. Za chwilę zostaniesz automatycznie przekierowany do spisu Twoich projektów...<br/>
  18. <br/>";
  19. ?>
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.