Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z $SESSION
Forum PHP.pl > Forum > Przedszkole
ZeroCool
Witam serdecznie,
w php "siedzę" od około 2-3 miesięcy. Ostatnio zacząłem się interesować tworzeniem systemu logowania/rejestracji na stronie. I napotkałem może niezbyt wielki, ale jednak problem.

Otóż, stworzyłem formularz do logowania, gdzie użytkownik podaje nazwę usera i hasło. Jeżeli poda poprawne dane, to tworzę sesję, której przypisuję nazwę użytkownika z bazy danych: $_SESSION['username'] = $dbusername; .

Po zalogowaniu na samej górze strony pojawia się Welcome i nazwa użytkownika. Pokazuje się ona praktycznie cały czas, aż do momentu, gdy nie kliknę na pasek adresu w przeglądarce i z tego poziomu przejdę na główną stronę. Wtedy wyświetla się już tylko Welcome. Co zrobić, by nazwa użytkownika (czyli, jak dobrze rozumiem również nazwa sesji) była widoczna cały czas?

Dodam, bo być może to jest istotne, że cały system logowania mam w pliku top.php, który w pliku index.php jest dodany na początku poprzez include("top.php");

Dziękuję już teraz za wszelkie wskazówki.

Pozdrawiam
kreciko
A czy na początku w pliku index.php masz session_start()? A może kilka razy robisz session_start()?
ZeroCool
Mam w pliku index.php na początku session_start();, w pliku top.php już nie (sprawdziłem i po dodaniu w top.php nic się niestety nie zmieniło).
kreciko
Możesz podać więcej szczegółów, np. fragmenty kodu?
ZeroCool
INDEX.PHP

  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <link rel="Stylesheet" type="text/css" href="style.css">
  6. <link rel="stylesheet" type="text/css" href="shadowbox.css">
  7. <script type="text/javascript" src="shadowbox.js"></script>
  8. <script type="text/javascript" src="jquery.js"></script>
  9. <script type="text/javascript">
  10. Shadowbox.init();
  11. </script>
  12. </head>
  13. <body>
  14. <?php include("top.php"); ?>
  15. <div id="content">
  16. <div id="reg"></div>
  17. <?php
  18.  
  19. $page = $_GET['page'];
  20. if($page)
  21. {
  22. $path = $page.".php";
  23.  
  24. if(file_exists($path))
  25. {
  26. include($path);
  27. }
  28. else
  29. {
  30. echo "Taka strona nie istnieje.";
  31. }
  32. }
  33. else
  34. {
  35. echo "Content";
  36. }
  37.  
  38.  
  39. ?>
  40. </div>
  41. </body>
  42. </html>


TOP.PHP
  1. <div id="top">
  2. <?php
  3. if($_POST['login'])
  4. {
  5. $email = $_POST['email'];
  6. $password = $_POST['password'];
  7.  
  8. if($username&&$password)
  9. {
  10. require ('connect.php');
  11.  
  12. $query = mysql_query("SELECT * FROM users WHERE email='$email' AND password='$password'");
  13. $numrows = mysql_num_rows($query);
  14.  
  15. if($numrows!=0)
  16. {
  17. while ($row = mysql_fetch_assoc($query))
  18. {
  19. $dbid = $row['id'];
  20. $dbemail = $row['email'];
  21. $dbfirstname = $row['firstname'];
  22. $dblastname = $row['lastname'];
  23. $dbpassword = $row['password'];
  24. $dbcn = $row['cn'];
  25. $dbrn = $row['rn'];
  26. }
  27.  
  28. if($username==$dbusername&&$password==$dbpassword)
  29. {
  30. echo $_SESSION['username'] = $dbusername;
  31. }
  32. else
  33. {
  34. echo "Wrong username or password.";
  35. }
  36. }
  37. else
  38. echo "Wrong username or password.";
  39. }
  40. else
  41. {
  42. echo "Please enter a username and a password.";
  43. }
  44. }
  45. ?>
  46.  
  47. <?php
  48. if($_SESSION['username'])
  49. {
  50. echo "<font style='font-weight: normal;'>Welcome to my<font style='color: red;'>page</font>.pl | <font style='font-weight: normal;'>".date(d).".".date(m).".".date(Y)."</font>";
  51. }
  52. else
  53. {
  54. ?>
  55. <form action="index.php" method="POST">
  56. Username: <input type="text" name="email">
  57. Password: <input type="password" name="password"> <input type="submit" name="login" value="Login">
  58. | <a href="register.php" rel="shadowbox;height=300;width=350">Register</a> | <?php echo date(d).".".date(m).".".date(Y); ?></form>
  59. <?php
  60. }
  61. ?>
  62.  
  63. </div>
  64.  
  65. <?php
  66. $losowa = rand(1, 3);
  67. echo "<div id='logo'><img src='".$losowa.".JPG'></div>";
  68. ?>
mkdes
Kod
if(isset($_SESSION['username'])){
echo'Użytkownik zalogowany: '.$_SESSION['username'];
}
kreciko
Po prostu jak przechodzi do strony głównej nie przekazujesz żadnych zmiennych w tablicy $_POST, m.in. 'login' i dlatego ten cały wielki warunek z wyświetleniem nazwy użytkownika jest pomijany.

btw.
Cytat
by nazwa użytkownika (czyli, jak dobrze rozumiem również nazwa sesji)

To nie zawsze jest sobie równoważne. A często się zdarza, że tak nie jest. A i hasła w bazie danych powinno się trzymać w postaci zahaszowanej.
ZeroCool
Wskazówka mkdes pomogła, dziękuję! Kreciko, Tobie również, za poświęcony czas.

Natomiast co do hasła, to ja umieszczam je w bazie w postaci sumy (tak to się chyba mówi) md5. O to chodzi z haszowaniem?
kreciko
Tak.
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.