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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php session_start();?>
<html>
<head>
<title>Kiszab V1.0</title>
<meta name="generator" content="Bluefish 1.0.7">
<meta name="author" content="">
<meta name="date" content="2010-08-16T10:20:59+0200">
<meta name="copyright" content="">
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<meta http-equiv="content-type" content=""""""text; charset=UTF-8" >
<meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-2">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="expires" content="0">

</head>
<body>

<?php
print_r ($_SESSION);
	$user = $_POST['my_user'];
	$pass = $_POST['my_pass'];
	$sess = $_SESSION['mehet'];
	
	// Nincs bejelentkezve
	if (!isset($_SESSION['mehet']))
	{	
		// Meg nem is prbalt bejelentkezni
		if (!isset($_POST['my_user']))
		{
		// Elso lepes, jelentkezzunk be!
		echo "<form method='post' action='";
		print $_SERVER['PHP_SELF'];
		echo "'>\n";

		echo "	<table border=1 align='center'>\n";
		echo "	<tr>\n";
		echo "		<td><label for='my_user'>Név:</label></td>\n";
		echo "		<td><input type='text' name='my_user'</td>\n";
		echo "	</tr>\n";
		echo "	<tr>\n";
		echo "		<td><label for='my_pass'>Jelszó:</label></td>\n";
		echo "		<td><input type='password' name='my_pass'></td>\n";
		echo "	</tr>\n";
		echo "	<tr>\n";
		echo "		<td colspan=2 align='center'><input type='submit' value='Elküld'></td>\n";
		echo "	</tr>\n";
		echo "	</table>\n";
		echo "</form>\n";
		}
		else
		{
		// bejelentkezesi kiserlet megvolt, ellenorzes
		if (($_POST['my_user'] == "user") and
			($_POST['my_pass'] == "pass"))
				$_SESSION['mehet'] = 1;
				
		}
	}
	if ($_SESSION['mehet'] == 1)
		{
		echo "	<table cellpadding='5' cellspacing='2' border='0' align='center'>\n";
		echo "	<tr><td><a href='masik.php'><h1>Demo oldal</h1></a></td></tr>\n";
		echo "	</table>\n";
		}
		
	if (($_SESSION['mehet'] != 1)		 
	and	 
		(isset($_POST['my_user'])))
		{
		echo "<a href='index.php'><br>Vissza a fõoldalra ...<hr></a><br><br>\n";
		echo "	<table cellpadding='5' cellspacing='2' border='0' align='center'>\n";
		echo "	<tr><td><a href=''><h1>Azt hiszem, ez most nem jött be!</h1></a></td></tr>\n";
		echo "	</table>\n";
		}

?>
</body>
</html>
és a masik.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php session_start();?>
<html>
<head>
<title>Kiszab V1.1</title>
<meta name="generator" content="Bluefish 1.0.7">
<meta name="author" content="Gyarmati Krisztián">
<meta name="date" content="2010-08-16T10:21:05+0200">
<meta name="copyright" content="">
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<meta http-equiv="content-type" content=""""""text; charset=UTF-8" >
<meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-2">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="expires" content="0">

</head>
<body>

<?php
print_r ($_SESSION);
include ("./setup.php");

// Program start pontja
echo "<a href='index.php'><br>Vissza a fõoldalra ...<hr></a><br><br>\n";

if ($_SESSION['mehet'] == 1)
{
	echo "<table cellpadding='5' cellspacing='2' border='1' align='center'>\n";
	echo "<tr>\n";
	echo "DEMO OLDAL";
	echo "</tr>\n";
	echo "</table>\n";
}
else
	echo "<h1>Na ez nem lesz így jó</h1>\n";
?>



</body>
</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.