Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziwny problem z logowaniem
Forum PHP.pl > Forum > PHP
pyrek
Witam mam dziwny problem.


Mam skrypt logowania na sesjach i u mnie lokalnie wszystko działa.

Ale posadziłem go na serwerze i dzieje się takie coś:

po pierwszym poprawnym logowaniu wpuszcza mnie do systemu ale jak chce coś dalej zrobić to mnie wywala z powrotem do logowania, dopiero jak się drugi raz zaloguje to już moge normalnie pracować.

Patrzyłem w katalog sesji i widze że po przeladowaniu jest tworzona 2 sesja a ta pierwsza jest olewana i pewnie to jest przyczyna tego ale nie wiem co moge zrobić aby to zmienić.
  1. <?php
  2.  
  3. $limit = 1800; //limit 1800 sekund czyli 30 minut
  4. setcookie ("stat", "1", time() + 43200);
  5.  
  6. include "admin/includes/config.php";
  7.  
  8.  
  9.  
  10. $query = " SELECT * FROM {$pr}config, {$pr}config_l ";
  11. $wynik =  mysql_query ($query);
  12. $rekord = mysql_fetch_array ($wynik);
  13. extract($rekord);
  14.  
  15.  
  16.  
  17. if($hurt_conf==0){
  18.  
  19.  
  20.  
  21. if(!isset($_SESSION['login_usr'])){
  22.  
  23. include"includes/log.php";
  24.  
  25. if(!isset($_POST['submit'])) {   $blad_log22='bad'; }
  26. else{ 
  27. $login=$_POST['login'];
  28. $haslo=$_POST['haslo'];
  29. $haslo = md5($haslo);
  30. if ($login<>"" and $haslo<>"") { 
  31.  
  32.  
  33.  
  34.  
  35. $sql=mysql_query("SELECT * FROM {$pr}klienci  WHERE login_klienta='$login' and haslo_klienta='$haslo' ");
  36. if (mysql_num_rows($sql)==1) { 
  37. $dane=mysql_fetch_array($sql);
  38. $_SESSION['lastAction'] = time();
  39. $_SESSION['login_usr'] = $login;
  40. $_SESSION['haslo_usr'] = $haslo;
  41. $_SESSION['id_klienta'] = $dane[0];
  42. $_SESSION['imie_klienta'] = $dane[3];
  43. $_SESSION['adres_klienta'] = $dane[4];
  44. $_SESSION['id_klienta_MAG'] = $dane[7];
  45. $_SESSION['magazyn'] = $dane[8];
  46. $_SESSION['grupa_kl'] = $dane[9];
  47. $_SESSION['widz_stany'] = $dane[10];
  48. $_SESSION['klient_hurt'] = $dane[11];
  49. $_SESSION['up_rabat'] = $dane[12];
  50. $_SESSION['magazyn_up'] = $dane[8];
  51. $_SESSION['hurt_kl'] = $dane[27];
  52.  
  53. $wynik_rab = mysql_query ("SELECT * FROM {$pr}rabaty WHERE id_klienta_r='$dane[0]';") or
  54. die ("błąd w pytaniu");
  55. if ($rekord_rab = mysql_fetch_array ($wynik_rab)){
  56. extract($rekord_rab);
  57. $_SESSION['rabat_klient'] = $stawka_rabat;
  58. }
  59.  
  60.  
  61. }else{ $blad_log22='bad'; }
  62. }
  63.  
  64.  
  65. else { $blad_log22='bad';  }
  66. }
  67. }
  68. //sprawdzanie czy w ogóle zmienne są ustawione:
  69.  
  70. if(isset($_SESSION['login_usr']) && isset($_SESSION['haslo_usr']) )
  71. {
  72. //jeśli zalogowany ale sesja wygasła
  73.     if( (time()-$_SESSION['lastAction']) >$limit)
  74.     { 
  75.    // session_unset(); session_destroy();
  76.     //   $blad_log='bad';
  77.     } 
  78.     
  79. //zalogowany i sesja jest ok
  80.     else{ 
  81. $sql=mysql_query("SELECT * FROM {$pr}klienci  WHERE login_klienta='$_SESSION[login_usr]' and haslo_klienta='$_SESSION[haslo_usr]'");
  82. if (mysql_num_rows($sql)=='1') {
  83. $_SESSION['lastAction'] = time(); //aktualizujemy licznik czasu
  84.  }
  85.  else { $blad_log22='bad';  // hasło i login w traksie sie zmieniło
  86.  }
  87. } 
  88. } 
  89.  
  90. if($blad_log22=='bad' ){  logowanie(); }
  91. else{
  92. // pobieranie treśći strony
  93.  
  94. include"includes/head.php";
  95. include"includes/top.php";
  96.  echo"<br><br>"; 
  97. }
  98.  
  99. }
  100. else{
  101.  
  102.  
  103. setcookie ("stat", "1", time() + 43200);
  104.  
  105. if ($_GET["akcja"]=="logout") { // wylogowanie
  106.   unset($_SESSION['login_usr']);
  107.   unset($_SESSION['haslo_usr']);
  108.   unset($_SESSION['id_klienta']);
  109.   unset($_SESSION['imie_klienta']);
  110.   unset($_SESSION['adres_klienta']);
  111.   unset($_SESSION['rabat_klient']);
  112.   unset($_SESSION['hurt_kl']);
  113.     unset($_SESSION['login_handlowca']);
  114.   unset($_SESSION['haslo_handlowca']);
  115.   unset($_SESSION['id_handlowca']);
  116.   unset($_SESSION['imie_handlowca']);
  117.   unset($_SESSION['nazwisko_handlowca']);
  118.   unset($_SESSION['hurt_kl']);
  119.    unset($_SESSION['id_klienta_MAG']);
  120.    unset($_SESSION['lastAction']);
  121.     unset($_SESSION['grupa_kl']);
  122.      unset($_SESSION['widz_stany']);
  123.       unset($_SESSION['klient_hurt']);
  124.  unset($_SESSION['up_rabat']);
  125.   unset($_SESSION['magazyn_up']);
  126.   
  127. }
  128.  
  129. ?>
Ludvik
Zacznij od tego...
  1. <?php
  2. if ($login<>"" and $haslo<>"")
  3. ?>

To są operatory z Pascala, w php jednoznacznym jest !=

Trochę ciężko się czyta ten kod, powcinaj go porządniej, bo w tej chwili trzeba włożyć na prawdę sporo pracy, żeby cokolwiek zauważyć. Popatrz o ile lepiej się czyta tak sformatowany kod:
  1. <?php
  2.  
  3. $limit = 1800; //limit 1800 sekund czyli 30 minut
  4. setcookie ("stat", "1", time() + 43200);
  5.  
  6. require_once 'admin/includes/config.php';
  7.  
  8. $query = " SELECT * FROM {$pr}config, {$pr}config_l ";
  9. $wynik = mysql_query ($query);
  10. $rekord = mysql_fetch_array ($wynik);
  11. extract($rekord);
  12.  
  13. if($hurt_conf==0) {
  14. if(!isset($_SESSION['login_usr'])) {
  15. require_once 'includes/log.php';
  16. if(!isset($_POST['submit'])) {  
  17. $blad_log22='bad'; 
  18. } else { 
  19. $login=$_POST['login'];
  20. $haslo=$_POST['haslo'];
  21. $haslo = md5($haslo);
  22. if ($login != '' and $haslo != '') {
  23. $sql=mysql_query("SELECT * FROM {$pr}klienci WHERE login_klienta='$login' and haslo_klienta='$haslo' ");
  24. if (mysql_num_rows($sql)==1) {
  25. $dane=mysql_fetch_array($sql);
  26. $_SESSION['lastAction'] = time();
  27. $_SESSION['login_usr'] = $login;
  28. $_SESSION['haslo_usr'] = $haslo;
  29. $_SESSION['id_klienta'] = $dane[0];
  30. $_SESSION['imie_klienta'] = $dane[3];
  31. $_SESSION['adres_klienta'] = $dane[4];
  32. $_SESSION['id_klienta_MAG'] = $dane[7];
  33. $_SESSION['magazyn'] = $dane[8];
  34. $_SESSION['grupa_kl'] = $dane[9];
  35. $_SESSION['widz_stany'] = $dane[10];
  36. $_SESSION['klient_hurt'] = $dane[11];
  37. $_SESSION['up_rabat'] = $dane[12];
  38. $_SESSION['magazyn_up'] = $dane[8];
  39. $_SESSION['hurt_kl'] = $dane[27];
  40.  
  41. $wynik_rab = mysql_query("SELECT * FROM {$pr}rabaty WHERE id_klienta_r='$dane[0]';") or die ("błąd w pytaniu");
  42. if ($rekord_rab = mysql_fetch_array ($wynik_rab)){
  43. extract($rekord_rab);
  44. $_SESSION['rabat_klient'] = $stawka_rabat;
  45. }
  46. } else {
  47. $blad_log22='bad';
  48. }
  49. } else { 
  50. $blad_log22='bad';
  51. }
  52. }
  53. }
  54.  
  55. //sprawdzanie czy w ogóle zmienne są ustawione:
  56.  
  57. if(isset($_SESSION['login_usr']) && isset($_SESSION['haslo_usr']) ) {
  58. //jeśli zalogowany ale sesja wygasła
  59. if ((time()-$_SESSION['lastAction']) >$limit) { 
  60. // session_unset(); session_destroy();
  61. //  $blad_log='bad';
  62. } else { 
  63. $sql=mysql_query("SELECT * FROM {$pr}klienci WHERE login_klienta='$_SESSION[login_usr]' and haslo_klienta='$_SESSION[haslo_usr]'");
  64. if (mysql_num_rows($sql)=='1') {
  65. $_SESSION['lastAction'] = time(); //aktualizujemy licznik czasu
  66. } else { 
  67. $blad_log22='bad'; // hasło i login w traksie sie zmieniło
  68. }
  69. } 
  70. } 
  71.  
  72. if($blad_log22=='bad' ) {
  73. logowanie();
  74. } else {
  75. include"includes/head.php";
  76. include"includes/top.php";
  77. echo"<br><br>";
  78. }
  79. } else {
  80. setcookie ("stat", "1", time() + 43200);
  81.  
  82. if ($_GET["akcja"]=="logout") { // wylogowanie
  83. unset($_SESSION['login_usr']);
  84. unset($_SESSION['haslo_usr']);
  85. unset($_SESSION['id_klienta']);
  86. unset($_SESSION['imie_klienta']);
  87. unset($_SESSION['adres_klienta']);
  88. unset($_SESSION['rabat_klient']);
  89. unset($_SESSION['hurt_kl']);
  90. unset($_SESSION['login_handlowca']);
  91. unset($_SESSION['haslo_handlowca']);
  92. unset($_SESSION['id_handlowca']);
  93. unset($_SESSION['imie_handlowca']);
  94. unset($_SESSION['nazwisko_handlowca']);
  95. unset($_SESSION['hurt_kl']);
  96. unset($_SESSION['id_klienta_MAG']);
  97. unset($_SESSION['lastAction']);
  98. unset($_SESSION['grupa_kl']);
  99. unset($_SESSION['widz_stany']);
  100. unset($_SESSION['klient_hurt']);
  101. unset($_SESSION['up_rabat']);
  102. unset($_SESSION['magazyn_up']);
  103. }
  104. }
  105.  
  106. ?>


Poszukaj artykułu na łamach serwisu o standardach kodowania.

Co do samego skryptu to może dodam od siebie:
  1. <?php
  2. $sql=mysql_query("SELECT * FROM {$pr}klienci WHERE login_klienta='$_SESSION[login_usr]' and haslo_klienta='$_SESSION[haslo_usr]'");
  3. if (mysql_num_rows($sql)=='1') {
  4. $_SESSION['lastAction'] = time(); //aktualizujemy licznik czasu
  5. } else { 
  6. $blad_log22='bad'; // hasło i login w traksie sie zmieniło
  7. }
  8.  
  9. ?>


To raczej nie jest najlepsze rozwiązanie. Skoro dane w sesji już istnieją, to musiały zostać zweryfikowane. Ponowne sprawdzanie to marnowanie czasu i mocy bazy danych. Jeżeli login i hasło by się zmieniły w trakcie, to może być jedynie wina kodu, a nie użytkownika.
Zmienna $blad_log22 nie wygląda najlepiej, lepiej pasuje $error i nadawanie jej wartości true/false. Komunikat 'bad' i tak nic nie wnosi moim zdaniem do kodu.

Sprawdzanie czy sesja wygasła w ten sposób też nie jest najlepszym pomysłem, chyba, że nie podoba ci się czas wygaśnięcia sesji z konfiguracji php. Sesje są automatycznie niszczone po upływie określonego czasu.

Jedną uwagę wycofuję, nie dopatrzyłem...
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.