ugrás a tartalomhoz

miért indul új munkamenet az oldal újratöltésekor?

a.d.a.m · 2006. Júl. 9. (V), 10.28
Sziatok!

A kérdésem a következő lenne: miért indul új munkamenet az oldal újratöltésekor? Próbáltam utánanézni a manualban, kerestem a Weblabor fórumában és levlistáiban is, mellesleg az utóbbiban találtam egy hasonló hozzászólást, de sajnos arra nem érkezett válasz :(

Egy bejelentkező oldalt készítek és jelenleg még a legelején tartok: elkészítettem a formot, ami továbbítja az adatokat, valamint a programot, ami leellenőrzi a beérkező információt, majd továbbítja a felhasználót egy másik oldalra. Azonban a form elküldésekor minden esetben új session indul, vagy legalábbis új session_id kerül generálásra.

Ami még érdekesebbé teszi a helyzetet, hogy a két különböző szerveren is futtattam a kódot és míg az egyiken működött, a másikon előált ez a gond.

Mint írtam átolvastam az ide vágó cikkeket és a fórum hozzászólások nagy részét, így igyekszem leszögezni: az oldal elején (mindenféle kimenet előtt) ott a session_start függvény és a programkódban sehol nincs megszakítva a munkamenet.

A kód a következő:
echo "<div id=\"bejelentkezo\">\n";
		echo "<h2 id=\"cimsor\">Bejelentkezés</h2>\n";
		echo "<form name=\"belepes\" method=\"post\" action=\""._admin_oldal."?sid=".session_id()."&padmin=login\">\n";
		echo "<div id=\"egyutt\">\n";
		echo "<div id=\"felirat\">Felhasználónév:</div>\n";
		echo "<div id=\"mezo\">\n";
		echo "<input name=\"uinput\" type=\"text\" size=\"43\">\n";
		echo "</div>\n";
		echo "</div>\n";
		echo "<div id=\"egyutt\">\n";
		echo "<div id=\"felirat\">Jelszó:</div>\n";
		echo "<div id=\"mezo\">\n";
		echo "<input name=\"pinput\" type=\"password\" size=\"43\">\n";
		echo "</div>\n";
		echo "</div>\n";
		echo "<div id=\"bejelent\"><input type=\"submit\" name=\"bejelent\" value=\"belép\"></div>\n";
		echo "</form>\n";
		echo "</div>\n";
...
if ( isset( $_POST['uinput'] ) == true AND isset( $_POST['pinput'] ) == true )
				{
				$this -> dstart();
				$table = mysql_query("SELECT * FROM user WHERE felhasznalonev LIKE '".base64_encode($_POST['uinput'])."' AND jelszo LIKE '".base64_encode($_POST['pinput'])."'", $_SESSION['JOIN']);
				$this -> dstop();
				if ( mysql_num_rows( $table ) == 1 )
					{
					$_SESSION['user'] = mysql_result($table, 0, 'id');
					echo "<script>window.location.replace('"._admin_oldal."?sid=".session_id()."');</script>";
					}
				else
					{
					echo "<script>window.location.replace('"._admin_oldal."?sid=".session_id()."&padmin=mess(3)');</script>\n";
					}
				}
			else
				{
				echo "<script>window.location.replace('"._admin_oldal."?sid=".session_id()."&padmin=mess(0)');</script>\n";
				}
Mivel szerintem nem a kódban lehet a probléma oka, bár azt nem állítom hogy tökéletes, mellékelem a phpinfo() függvény session kimenetét a két szerverről:

Ahol működik:
session
Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmps /tmps
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On

És ahol nem:
session
Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php4 /var/lib/php4
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off


Kérlek benneteket, hogy ha van ötletetek osszátok meg velem!
Előre is köszi.
 
1

win -> linux

Anonymous · 2006. Júl. 9. (V), 20.57
Szia!

Nekem hasonló jelenséget produkált, amikor nemrég win -> linux költöztem. Egyszerűen nem találtam semmi beállítási hibát, valamint a win szerveren ment is szépen az oldal.

Végül megtaláltam az egyik include-t, amit ha kiszedtem, eltünt a jelenség. Ennek tartalmát átmásoltam egy új fájlba, és minden rendbejött.

Csak feltételezni tudom h valami karakterkódolási hiba lehetett....
3

ez nem lehet...

a.d.a.m · 2006. Júl. 10. (H), 07.31
Gondoltam én is hasonlóra, ezért amikor lekértem a phpinfo-t megnéztem ezt is, de mindkét szerver linux-apache konfiguráció.
A másik gond, hogy a szerver beállításaihoz nincs hozzáférésem :(
2

Session handler

janoszen · 2006. Júl. 9. (V), 21.32
Írj egy "dummy" session handlert és abba adj ki debug üzeneteket. Ezen felül hasznos lehet a HTTP forgalmat is monitorozni. Ezzel elég hamar rá lehet jönni a bibi okára.
4

SZMbe jutott valami...

a.d.a.m · 2006. Júl. 10. (H), 08.19
...és nem jött be :(
Megpróbáltam a következőt: az admin oldalra hivatkozó linknél (itt indítom a munkamenetet is a session_starttal) már átadom a session_id-t (gondoltam azért indul újra meg újra el a munkamenet, mert az admin oldalon hívom meg a session_start-ot), de ekkor az admin oldalon nem is érzékelte a munkamenetet.
5

session.save_path írható, session_id() visszatérési értéke

Dualon · 2006. Júl. 10. (H), 12.44
  • session.save_path-ban megadott könyvtárat eléri, tudja írni a php?
  • session_id() mit ad vissza?
  • fizetős/ingyenes tárhely? (A supportjuk miatt kérdezem...)
6

válaszok

a.d.a.m · 2006. Júl. 10. (H), 14.10
a könyvtárat eléri és írni is tudja; a session_id alapesetben visszaadja az azonosítót, de minden esetben (az oldal minden újratöltésekor) más és más az érték, a változtatás után (ld. előző hozzászólásom) azonban semilyen értéket nem adott vissza.
A tárhely fizetős (dream.hu).
7

Ők mit mondanak a problémára?

Dualon · 2006. Júl. 10. (H), 18.16
Vedd fel velük a kapcsolatot - ha fizetős tárhelyen vagy, a kötelezettségeiddel jogokat is nyertél.
Ha lesz konstruktívabb ötletem is, feltétlenül megírom. :)