Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Znikająca sesja po przejściu na podstrony
Forum PHP.pl > Forum > Przedszkole
Bellum
Witam, piszę skrypt logowania PHP + MySQL, skrypt oparty o PHP i sztywną nazwę użytkownika i hasła np:
  1. if($_POST['login'] == '123 && $_POST['haslo'] == '1234')
to nie mam żadnych problemów z żywotnością sesji, jednak gdy opieram skrypt o MySQL, to pojawia się właśnie problem.

@poprawka skrypt oparty o sztywne loginy i hasła również ginie. Na Switch CASE

  1. <?php
  2.  
  3. include_once"config_db.php";
  4.  
  5. if(isset($_POST['user']) && isset($_POST['pass']))
  6. {
  7. $zuser = $_POST['user'];
  8. $zpass = $_POST['pass'];
  9.  
  10. $mysqlia = "SELECT * FROM users WHERE user='".$zuser."' AND password='".md5($zpass)."'";
  11. $echo = $db->query($mysqlia);
  12. if($echo->num_rows > 0)
  13. {
  14. $_SESSION['szuser'] = $zuser;
  15. }
  16. $db->close();
  17. }
  18. if(isset($_SESSION['szuser']))
  19. {
  20. echo "<div class='td'>Zalogowałeś się pomyślnie&nbsp;".$_SESSION['szuser']."&nbsp;".$zpass."</div>";
  21. }
  22. else
  23. {
  24.  
  25. echo "<table class='te'>
  26. <form method='POST' action=''>
  27. <tr>
  28. <td colspan='2' class='tdt'>Logowanie do panelu użytkownika</td>
  29. </tr>
  30. <tr>
  31. <td class='td'>Nazwa użytkownika:</td><td class='td'><input type='text' name='user' /></td>
  32. </tr>
  33. <tr>
  34. <td class='td'>Hasło:</td><td class='td'><input type='text' name='pass' /></td>
  35. </tr>
  36. <td colspan='2' class='td'><input type='submit' value='Wyślij' /></td>
  37. </tr>
  38. </form>
  39. </table>";
  40.  
  41. }
  42. ?>

Strona działa o SWITCH CASE - menu, plik nazywa się login.php po wejściu z index.php nazywa się już oczywiście inaczej index.php?id=3 nie wiem czy ma to wpływ na jednorazową żywotność sesji. Otóż loguje się poprawnie otrzymując komunikat. Gdy jednak kliknę Strona główna, bądź chcę przejść do jakiejkolwiek pod strony np: by sprawdzić moje uprawnienia, to sesja znika.

Skrypt do sprawdzania czy sesja istnieje.

  1. <?php
  2. if(isset($_SESSION['szuser']))
  3. {
  4. echo "ok";
  5. }
  6. else
  7. {
  8. echo "<div class='td'>Nie masz uprawnień, lub sesja wygasła</div>";
  9. }
  10. ?>

Gdzie leży problem?
bastard13
Jeżeli wszytko przechodzi przez index.php to przenieś session_start() na początek index.php, a ze stron includowanych wyrzuć.
Powinno pomóc.
Bellum
Cytat(bastard13 @ 11.06.2010, 18:41:16 ) *
Jeżeli wszytko przechodzi przez index.php to przenieś session_start() na początek index.php, a ze stron includowanych wyrzuć.
Powinno pomóc.

Usunąłem session_start() z pozostałych includowanych plików już wcześniej i teraz ponownie, nie jest to jednak rozwiązanie gdyż sesja i tak ginie.
bastard13
A pokaż jak wygląda index.php.
Bellum
Cytat(bastard13 @ 11.06.2010, 19:08:00 ) *
A pokaż jak wygląda index.php.

  1. ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html><head>
  4. <link href="2010.css" rel="stylesheet" type="text/css" />
  5. </head><body>
  6. <div class="td"><a href="index.php">Strona główna</a>
  7. || <a href="index.php?id=2">Zarejestruj się</a>
  8. || <?php
  9. if(isset($_SESSION['szuser']))
  10. {
  11. echo "Zalogowany jako: ". $_SESSION['szuser'];
  12. }
  13. else{
  14.  
  15. echo "<a href='index.php?id=3'>Zaloguj się</a>";
  16. }
  17. ?> || <a href="index.php?id=4">Panel kontrolny</a></div>
  18.  
  19. <?php
  20. switch ($_GET['id']) {
  21.  
  22. case 1:
  23. include'index.php';
  24. break;
  25.  
  26. case 2:
  27. include'register.php';
  28. break;
  29.  
  30. case 3:
  31. include'login.php';
  32. break;
  33.  
  34. case 4:
  35. include'cp.php';
  36. break;
  37.  
  38. default:
  39. include'default.php';
  40. }
  41. ?>
  42. <div id="board_footer">
  43. </div>
  44.  
  45. <div id="footer">
  46. Š 2010 tuptup<br />
  47. Powered By tuptup Š 2010.<br />
  48. </div>
  49. </body></html>

Małpę daję przed session gdyż non stop otrzymuję komunikat,
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Program Files\WebServ\httpd\2010\index.php:1) in D:\Program Files\WebServ\httpd\2010\index.php on line 1 ale to i tak nie ma wpływu na to czy sesja żyje czy ginie. Dlatego ignoruję ten błąd.
bastard13
Dodaj w pliku index.php na początku ob_start();
A na końcu ob_end_flush();
I usuń @. Jak ci nadal będzie wywalało ostrzeżenie to trzeba coś z tym zrobić, a nie ukrywaćsmile.gif

Co do tego ostrzeżenia to sprawdź czy nie masz jakiejś spacji przed wszystkim.
Bellum
Cytat(bastard13 @ 11.06.2010, 19:26:01 ) *
Dodaj w pliku index.php na początku ob_start();
A na końcu ob_end_flush();
I usuń @. Jak ci nadal będzie wywalało ostrzeżenie to trzeba coś z tym zrobić, a nie ukrywaćsmile.gif

Co do tego ostrzeżenia to sprawdź czy nie masz jakiejś spacji przed wszystkim.

Nie pomaga. Błąd, który ukrywam może być od formatowania, plik jest w formacie UTF-8, gdzieś bodajże w niektórych formatach coś jest ukryte na początku. Nie zmienna to faktu, że sesja ginie.

EDIT: @@ Rozwiązane

Niewiarygodne zmieniłem formatowanie z UTF-8 na UTF-8 BEZ BOM i jak ręką odjął błąd zniknął z session_start(); na początku i dodatkowo sesja już nie ginie. Problem rozwiązany. Nadal nie mogę uwierzyć, że taki drobiazg powoduję takie męki. Dzięki bastard13 za pomoc te dwie dodatkowe zmienne, które podajesz nie są wymagane.
bastard13
A sprawdź czy będzie ci działo coś takiego.
Plik pierwszy.php
  1. <?php
  2. if(isset($_SESSION['test']))
  3. echo $_SESSION['test'];
  4. else
  5. $_SESSION['test']='test';
  6. ?>
  7. <a href="drugi.php">Dalej</a>


Plik drugi.php
  1. <?php
  2. echo $_SESSION['test'];
  3. ?>
  4. <a href="pierwszy.php">Dalej</a>


I sprawdź czy wyświetli ci na ekranie test.
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.