Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z sesja
Forum PHP.pl > Forum > PHP
bluepk
Witajcie!

Mam zrobiony skrypt logowania. Na jednym serwerze jest ok, na drugim już nie. Problem z sesjami. Logowanie przebiega bez problemu, ale strona dla zalogowanych sie nie otwiera.

  1. <?include("config.php");
  2. ?>
  3. <html>
  4.  
  5. <head>
  6. </head>
  7.  
  8. <body>
  9. <div id="container">
  10. <div id="page"><?
  11. if(isset($_SESSION["zalogowany"])){
  12. switch ($_GET['akcja']){
  13. case ("wyloguj"):
  14. echo 'Zostałeś wylogowany!';echo '<meta http-equiv="Refresh" content="2; url=index.php">';break;
  15. default:echo '<img src="img/powit.png" align="center" />';
  16. }
  17. }else{
  18. echo '<div id="logowanie">Panel Administracyjny - logowanie</div>';
  19. switch ($_GET['akcja']){
  20. case ("weryfikuj"):
  21. $query = mysql_query("SELECT * FROM admin WHERE `login` = '" . $_POST['login'] . "' ");
  22. $fetch = mysql_fetch_array($query);
  23. if ( $fetch ){
  24. if (md5( $_POST['pass']) == $fetch['pass']){
  25. if (1 == $fetch['aktywacja']){
  26. $_SESSION['zalogowany'] = 1;
  27. $_SESSION['idzalogowany'] = $fetch['id'] ;
  28. $_SESSION['imie_nazwisko'] = $fetch['imie_nazwisko'] ;
  29. $_SESSION['mail'] = $fetch['mail'] ;
  30. $_SESSION['aktywacja'] = $fetch['aktywacja'] ;
  31. $_SESSION['login'] = $fetch['login'] ;
  32. $_SESSION['pass'] = $fetch['pass'] ;
  33. $_SESSION['podpis'] = $fetch['podpis'] ;
  34. echo '<meta http-equiv="Refresh" content="0; url=index.php">';}else{
  35. echo '<div class="komunikat">Ten użytkownik nie jest jeszcze aktywowany.</div>';}}else{
  36. echo '<div class="komunikat">Podane hasło jest błędne!</div>';}}else{
  37. echo '<div class="komunikat">Użytkownik <b>'.$login.'</b> nie istnieje!</div>';}break;}
  38. echo '<table align="center" width="230" border="0" cellspacing="0" cellpadding="0">
  39. <tr>
  40. <form method="post" action="?akcja=weryfikuj">
  41. <td align="right" width="99" height="32">identyfikator:</td>
  42. <td width="127" height="32"><input class="input" type="text" name="login" size="23" /></td>
  43. </tr>
  44. <tr>
  45. <td align="right" width="99" height="29">haslo:</td>
  46. <td width="127" height="29"><input class="input" type="password" name="pass" size="23" /></td>
  47. </tr>
  48. <tr>
  49. <td align="center" width="223" height="32" colspan="2"><input class="input2" type="submit" value="zaloguj" /></td>
  50. </form>
  51. </tr>
  52. </table>';}?>
  53. </body>
  54. </div>
  55. </div></html>
CuteOne
A sprawdzałeś czy np. $_SESSION['idzalogowany'] nie jest pusty?? Na końcu skryptu wstaw


ps. w życiu doczesnym nie widziałem gorzej napisanego logowania ;o
ps2. zapisujesz do sesji login, email i nazwisko?? ;o
ps3. dlaczego 2x włączasz sesje?? mówię o tym:
  1. <?include("config.php");
  2. ?>
  3. // a później to->
  4. case ("wyloguj"):
  5. session_start();
michaJlS
mały OT

  1. mysql_query("SELECT * FROM admin WHERE `login` = '" . $_POST['login'] . "' ");


poczytaj o sql injection
bluepk
No faktycznie jest mały 'sajgon'. Kwestia w tym, ze na jednym z serwerów jest problem z sesją. Logując się dane porównywane z baza się zgadzają.
Pilsener
Daj na początku skryptu:
  1. print_r($_SESSION);


I zobacz, włącz też wyświetlanie błędów (na serwerze może być domyślnie wyłączone). Poza tym:
- filtruj zmienne odbierane z get i post
- sól hasła
- nie trzymaj hasła w sesji
- sprawdzaj, czy np. user został faktycznie wylogowany
- session_start wystarczy raz
- używaj standardowych mechanizmów zabezpieczenia sesji
- a w ogóle najlepiej skorzystać z gotowego mechanizmu sesji, najlepiej własnego
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.