Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sesje, dane POST -> logowanie, dziwne zachowanie
Forum PHP.pl > Forum > PHP
and133and133
Witam

pisałem ostatnio taki skrypcik i napotakalem takie efekty :

1) jezeli po zalogowaniu kliknę linke wyloguj i zaczne "cofać przegladarka" - (back || ATL + lewa strzalka) to przejde przez forme zaloguj do strony startowej z jaka wystartowala przegladarka. W tym przypadku nie ma nic w tym dziwnego. Czytaj nr 2)

2) jezeli po zalogowaniu kliknę linke test_1 a nastepnie powtórze czynnosci z pkt 1 od kliknij wyloguj to przegladarka zapyta mnie o przeslanie zawartosci POST z formularza, klikajac ok zaloguje sie ..... a tego nie chce.

Pytanie brzmi dlaczego po zalogowaniu, kliknieciu linki test_1 a nastepnie wyloguj przegladarka oferuje mi dane ktorych w pkt 1 nie oferowala questionmark.gif?


Co do ustawien:
- przegladarka mozilla z obsluga cookies
- php z opcjami :
session.cookie_lifetime=0
session.use_cookies =1
session.autostart=0
session.use_trans_sid=0

temat bezpieczenstwa przekazywanych danych oraz estetyki kodu prosze zostawic w spokoju, zdaje sobie sprawe z jego poziomu.


Z góry dzieki za pomoc .


  1. <?
  2. session_register("zalogowany");
  3.  
  4. if($_SESSION['zalogowany'] != "tak") {
  5.  
  6. if($_POST['op'] == "1" ) {
  7. if($_POST['login'] == "a") {
  8. $_POST['login'] = "";
  9. $_SESSION['zalogowany'] ="tak";
  10.  
  11. }else{
  12. $error=1;
  13. }
  14. $_POST['op'] = ""; 
  15. }
  16. }
  17.  
  18. if($_SESSION['zalogowany'] == "tak") {
  19.  
  20. if($_GET['r'] == "1"){
  21. header("Location: test.php"); 
  22. }
  23.  
  24. echo "Jestes zalogowany<br>
  25. <a href="test.php?r=1">WYLOGUJ</a><br><br><br>
  26. <a href="test.php?we=12">test 1</a>";
  27. }else{
  28. echo " <BR><form method="POST" action="test.php" autocomplete="off"><table>";
  29. if($error == "1") {
  30. $error=0;
  31. echo"<tr><td></td><td><b><font color=red>ZŁE HASŁO LUB LOGIN !!!  error(1)</font></b></td></tr>";
  32. }
  33. echo" <tr><td><b>Login : </b></td><td><label><INPUT name="login" size="20" type="text"></td></tr>
  34. <INPUT type="hidden" name="op" value="1">
  35. </table><BR>
  36. <INPUT type="submit" value="Zaloguj">
  37. </form>";
  38. }
  39. ?>
shpyo
Zrób po zalogowaniu i wylogowaniu przekierowanie i problem zniknie.
marast78
proponuje wylogowanie robić w oddzielnym pliku bez tej zmiennej r i wtedy starczy tylko to:
  1. <?php
  2. session_unset('zalogowany');
  3. header("Location: test.php");
  4. ?>


wogóle to odchodzi się od wykorzystywania funkcji session_register a używanie zmiennych globalnych sesji jedynie, wtedy pamiętaj o skorzystaniu z isset i wcale nie musisz niszczyć sesji.
and133and133
Dzieki za odpowiedzi.

Podejrzewam ze problem tkwi nie tylko w tym . Dla przykładu podaje zmieniony kod z którym też jest problem bo nie ustawia mi cookie 'test' z wyjatkiem przegladarki mozilla. Opera, IE i inne nie przyjmuja ciastek .... ale do tego juz doszedłem. Jezeli zmienie linie 14 na :
Kod
setcookie('test', $_POST['login']) or die('aaaaaaaaaaaaaaaaaaaaaaaaa');


wszystkie przegldarki dzialaja poprawnie ...... Usuniecie lifetime nie powinno miec az takiego znaczenia. W akcie desperacji uruchomilem winsyfa (w2k) z PHPTriad (4.1.1) i nie ma takich problemów .... Nomalnie pracuje na php 4.3.10-18 Debian.

  1. index.php
  2. <?
  3. ini_set( 'session.use_cookies', 1 );
  4. ini_set( 'session.use_trans_sid', 0 );
  5. ini_set( 'session.auto_start', 0 );
  6. ini_set( 'session.cookie_lifetime', 0 );
  7. ini_set( 'session.name', 'nic' );
  8.  
  9. if(isset($_POST['op'])) {
  10. if($_POST['login'] == "a") {
  11. $_SESSION['logowal_sie'] = $_POST['login'];
  12. setcookie('test', $_POST['login'], time() + 60) or die('aaaaaaaaaaaaaaaaaaaaaaaaa');
  13. header("Location: index.php");
  14. }else{
  15. $error=1;
  16. }
  17. }
  18.  
  19. if(isset($_COOKIE['test']) && $_COOKIE['test'] == $_SESSION['logowal_sie']) {
  20.  
  21. echo "Jestes zalogowany<br>
  22. <a href="wyloguj.php?">WYLOGUJ</a><br><br><br>
  23. <a href="index.php?we=12">test</a>";
  24.  
  25. }else{
  26. echo " <BR><form method="POST" action="index.php" autocomplete="off" target="_top"><table>";
  27. if($error == "1") {
  28. $error=0;
  29. echo"<tr><td></td><td><b><font color=red>ZŁE HASŁO LUB LOGIN !!! error(1)</font></b></td></tr>";
  30. }
  31. echo" <tr><td><b>Login : </b></td><td><label><INPUT name="login" size="20" maxlength="15" type="text"></td></tr>
  32. </table><BR>
  33. <INPUT name="op" type="submit" value="Zaloguj">
  34. </form>";
  35. }
  36. ?>


  1. wyloguj.php
  2. <?
  3.  
  4. setcookie('test', '', time() - 60) or die('bbbbbbbbbbbbbbbb');
  5. session_unregister('logowal_sie');
  6. header("Location: index.php"); 
  7.  
  8. ?>


Z testow samych ciastek wynika ze dzialaja OK - testowalem ponizszym skryptym :

  1. test.php
  2. <?
  3. ini_set( 'session.use_cookies', 1 );
  4. ini_set( 'session.use_trans_sid', 0 );
  5. ini_set( 'session.auto_start', 0 );
  6. ini_set( 'session.cookie_lifetime', 0 );
  7. ini_set( 'session.name', 'nic' );
  8.  
  9. setcookie('VerifyUser', date('H-m-s'), time() + 60) or die('aaaaaaaaaaaaaaaaaaaaaaaaa');
  10.  
  11. if(isset($_SESSION['f'])) {
  12. echo 'ciacho postawione<br>';
  13. unset($_SESSION['f']);
  14. }else{
  15. $_SESSION['f']=1;
  16. header("Location: test.php?poszedl=3");
  17. }
  18.  
  19. echo 'VeriyfUser = '.$_COOKIE['VerifyUser'].'<br>';
  20. echo 'nic = '.$_COOKIE['nic'].'<br>';
  21.  
  22. ?>




Kod jest z klasy "przedszkole" ale różna reakcja roznych przegladarek nie powinna wystapic. Wydaje mi sie ze dobrze pokrzaczyłem konfiguracje serwera ... ? Jak ktoś ma pomysł czego to wina i co z tym zrobic chetnie posłucham.

Pozdrawiam.
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.