Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Znikająca sesja po przejściu na podstrony, Sesja znika po przejściu do podstron
Bellum
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

Ostrzeżenie: (0%)
-----


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?


Ten post edytował Bellum 11.06.2010, 17:59:05
Go to the top of the page
+Quote Post
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Jeżeli wszytko przechodzi przez index.php to przenieś session_start() na początek index.php, a ze stron includowanych wyrzuć.
Powinno pomóc.
Go to the top of the page
+Quote Post
Bellum
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Bellum 11.06.2010, 17:56:22
Go to the top of the page
+Quote Post
bastard13
post
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A pokaż jak wygląda index.php.
Go to the top of the page
+Quote Post
Bellum
post
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bastard13
post
Post #6





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ć(IMG:style_emoticons/default/smile.gif)

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

Ten post edytował bastard13 11.06.2010, 18:30:22
Go to the top of the page
+Quote Post
Bellum
post
Post #7





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 2.03.2010
Skąd: ta pewność?

Ostrzeżenie: (0%)
-----


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ć(IMG:style_emoticons/default/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.

Ten post edytował Bellum 11.06.2010, 18:47:34
Go to the top of the page
+Quote Post
bastard13
post
Post #8





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:15