ugrás a tartalomhoz

$_SESSION eltűnik egy idő múlva ?

SargaRigo · 2010. Aug. 16. (H), 10.27
Sziasztok!

Írtam egy nagyon egyszerű beléptetőt session-nal, ami mindössze két oldal között próbálná fenntartani a kapcsolatot. Az első az index.php, ami belépett felhasználó számára linket mutat a 'másik' oldalra, ha nincs belépve akkor pedig egy beléptető formot.
A 'másik' oldal egy visszalinket tartalmaz az index-re.
Működne is szépen, oda vissza lehet ugrálni, de érdekes módon egy idő után törlődik a $_SESSION tömb. Ez kb egy perc körül van.
Nem értem miért?


Krisz


index.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <?php session_start();?>  
  3. <html>  
  4. <head>  
  5. <title>Kiszab V1.0</title>  
  6. <meta name="generator" content="Bluefish 1.0.7">  
  7. <meta name="author" content="">  
  8. <meta name="date" content="2010-08-16T10:20:59+0200">  
  9. <meta name="copyright" content="">  
  10. <meta name="keywords" content="">  
  11. <meta name="description" content="">  
  12. <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">  
  13. <meta http-equiv="content-type" content=""""""text; charset=UTF-8" >  
  14. <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-2">  
  15. <meta http-equiv="content-style-type" content="text/css">  
  16. <meta http-equiv="expires" content="0">  
  17.   
  18. </head>  
  19. <body>  
  20.   
  21. <?php  
  22. print_r ($_SESSION);  
  23.     $user = $_POST['my_user'];  
  24.     $pass = $_POST['my_pass'];  
  25.     $sess = $_SESSION['mehet'];  
  26.       
  27.     // Nincs bejelentkezve  
  28.     if (!isset($_SESSION['mehet']))  
  29.     {     
  30.         // Meg nem is prbalt bejelentkezni  
  31.         if (!isset($_POST['my_user']))  
  32.         {  
  33.         // Elso lepes, jelentkezzunk be!  
  34.         echo "<form method='post' action='";  
  35.         print $_SERVER['PHP_SELF'];  
  36.         echo "'>\n";  
  37.   
  38.         echo "  <table border=1 align='center'>\n";  
  39.         echo "  <tr>\n";  
  40.         echo "      <td><label for='my_user'>Név:</label></td>\n";  
  41.         echo "      <td><input type='text' name='my_user'</td>\n";  
  42.         echo "  </tr>\n";  
  43.         echo "  <tr>\n";  
  44.         echo "      <td><label for='my_pass'>Jelszó:</label></td>\n";  
  45.         echo "      <td><input type='password' name='my_pass'></td>\n";  
  46.         echo "  </tr>\n";  
  47.         echo "  <tr>\n";  
  48.         echo "      <td colspan=2 align='center'><input type='submit' value='Elküld'></td>\n";  
  49.         echo "  </tr>\n";  
  50.         echo "  </table>\n";  
  51.         echo "</form>\n";  
  52.         }  
  53.         else  
  54.         {  
  55.         // bejelentkezesi kiserlet megvolt, ellenorzes  
  56.         if (($_POST['my_user'] == "user"and  
  57.             ($_POST['my_pass'] == "pass"))  
  58.                 $_SESSION['mehet'] = 1;  
  59.                   
  60.         }  
  61.     }  
  62.     if ($_SESSION['mehet'] == 1)  
  63.         {  
  64.         echo "  <table cellpadding='5' cellspacing='2' border='0' align='center'>\n";  
  65.         echo "  <tr><td><a href='masik.php'><h1>Demo oldal</h1></a></td></tr>\n";  
  66.         echo "  </table>\n";  
  67.         }  
  68.           
  69.     if (($_SESSION['mehet'] != 1)          
  70.     and    
  71.         (isset($_POST['my_user'])))  
  72.         {  
  73.         echo "<a href='index.php'><br>Vissza a fõoldalra ...<hr></a><br><br>\n";  
  74.         echo "  <table cellpadding='5' cellspacing='2' border='0' align='center'>\n";  
  75.         echo "  <tr><td><a href=''><h1>Azt hiszem, ez most nem jött be!</h1></a></td></tr>\n";  
  76.         echo "  </table>\n";  
  77.         }  
  78.   
  79. ?>  
  80. </body>  
  81. </html>  
és a masik.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <?php session_start();?>  
  3. <html>  
  4. <head>  
  5. <title>Kiszab V1.1</title>  
  6. <meta name="generator" content="Bluefish 1.0.7">  
  7. <meta name="author" content="Gyarmati Krisztián">  
  8. <meta name="date" content="2010-08-16T10:21:05+0200">  
  9. <meta name="copyright" content="">  
  10. <meta name="keywords" content="">  
  11. <meta name="description" content="">  
  12. <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">  
  13. <meta http-equiv="content-type" content=""""""text; charset=UTF-8" >  
  14. <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-2">  
  15. <meta http-equiv="content-style-type" content="text/css">  
  16. <meta http-equiv="expires" content="0">  
  17.   
  18. </head>  
  19. <body>  
  20.   
  21. <?php  
  22. print_r ($_SESSION);  
  23. include ("./setup.php");  
  24.   
  25. // Program start pontja  
  26. echo "<a href='index.php'><br>Vissza a fõoldalra ...<hr></a><br><br>\n";  
  27.   
  28. if ($_SESSION['mehet'] == 1)  
  29. {  
  30.     echo "<table cellpadding='5' cellspacing='2' border='1' align='center'>\n";  
  31.     echo "<tr>\n";  
  32.     echo "DEMO OLDAL";  
  33.     echo "</tr>\n";  
  34.     echo "</table>\n";  
  35. }  
  36. else  
  37.     echo "<h1>Na ez nem lesz így jó</h1>\n";  
  38. ?>  
  39.   
  40.   
  41.   
  42. </body>  
  43. </html>  
 
1

session_start()

ironwill · 2010. Aug. 16. (H), 11.01
A kódod session_start()-tal kezdődjön.

(Nem igazán érhető, hogy mi akarna ez lenni: 1. van session timeout, de az biztos nem egy perc, 2. ha meg nem jó a kódod, akkor meg egy percig miért csinálja meg..?)

update: esetleg a hiba lehet a setup.php-ban. Annak a tartalma nem látszik. Keress rá a kódodban az összes session változóra és nézd végig, hogy miket csinálsz vele, nincs-e valahol session megszüntetés, ami egy hibás feltétel miatt lefuthat.
2

Jogos az észrevétel, de a

SargaRigo · 2010. Aug. 16. (H), 11.42
Jogos az észrevétel, de a setup.php mindössze három értékadást tartalmaz az eredeti adatbázis-kezeléshez. Benne maradt.
Viszont amit csatoltam, az valódi file-ok tartalma, amiket valóban feltöltöttem, és valóban a fenti hibát produkálják. :(
A session_start() átkerült az első sorba.

Egyébként meg lehet nézni működés közben, itt van feltöltve
A user az user, a jelszó meg pass.

Az általad is feszegetett kérdések tesznek a sírba lassan. Konkrétan hogy miért működik amikor működik, és később meg miért nem??
Ez a session timeout miféle állat? Meg lehet nézni valahogy az aktuális értékét?

update: A böngészőt már kizártam, mert seamonkey alatt is csinálja, meg firefox alatt is.

Krisz
3

ini_set / php paraméterek

deejayy · 2010. Aug. 16. (H), 12.06
Nézz küröl a PHP session.* paraméterei környékén. php.net-en van sok okos leírás, egy-két tipp:
- session.gc_maxlifetime
- session.gc_divisor
- session.cookie_lifetime

A gc (garbage collector) törli a php sessionfájlokat bizonyos idő után a session.save_path elérési útról.
4

Ez már nekem kicsit kezd

SargaRigo · 2010. Aug. 16. (H), 12.12
Ez már nekem kicsit kezd magas lenni. Itt nem találtam olyat, mint amit írtál.
de ha már itt tartunk, azt elfelejtettem mondani, hogy nem saját a php szerver, hanem ultraweb-es. Mondjuk ezt mondhattam volna hamarabb is. Nade másnak nincs ilyen gondja? Nincs valakinek egy _működő_ példaprogramja?

Krisz
5

Csekkit: here.

deejayy · 2010. Aug. 16. (H), 12.15
Csekkit: here.
6

Csekkoltam. A php.ini a

SargaRigo · 2010. Aug. 16. (H), 12.24
Csekkoltam. A php.ini a szerveren van nemdebár? De egy nyilvános tárhelyen én nem férek hozzá a php.ini-hez.
Nem hiszem el, hogy ilyen bonyolult lenne ez a probléma :(
7

masik.php

Poetro · 2010. Aug. 16. (H), 12.25
Ugye a masik.php is session_start-tal kezdődik?
8

Igen, természetesen azzal

SargaRigo · 2010. Aug. 16. (H), 12.31
Igen, természetesen azzal kezdődik mindkettő. A példaprogramban még előtte van egy 'doctype' sor, de valójában már megcseréltem, így a session_start az első dolog a file-ban
9

Megvan az oka, ne

SargaRigo · 2010. Aug. 16. (H), 12.40
Megvan az oka, ne keressétek!
Sajnos csak az ok van meg, megoldás valószínűleg a költözés lesz :(
Itt írja hogy miért

Azért köszi a próbálkozást!

Krisz
10

Saját session kezelés

Poetro · 2010. Aug. 16. (H), 12.50
Amennyiben saját session kezelést írsz, akkor nem kell elköltöznöd. Persze ilyet írni nem feltétlen könnyű, sőt valószínűleg lassabb is / és ha nem jól írod meg, akkor kevésbé biztonságos, mint a PHP-ba épített alap session kezelés, de talán megéri foglalkozni vele. Érdemes megnézni a példákat.