webForumDet fria alternativet

Problem med sessionshantering

6 svar · 1 126 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 597 inlägg
#1

Hej,

Jag driver sidan flygfyren.nu och har nu fått in rapporter från användare som tyder på att det är något problem med sessionshanteringen på sidan.

Det här är en felrapport från en användare på hur felet upplevs:

Jag har upplevt att flygfyren ofta tappar min sessionsreferens (senaste 1-2 åren).

Mao att jag att loggat in, är inne på en undersida och sedan går till tex en annan undersida via en referens tex via huvudmenyn så försvinner min inloggning. Sen kan jag inte logga in igen på ett par minuter.

Dock så funkar det ibland att rädda situationen om jag backar i webbläsaren och försöker ta mig fram via någon länk på den sida jag sist besökte.

Dessutom så är det så att när jag loggar ut så ligger jag ändå kvar i "besökarlistan".

Verkar som cookiehanteringen strular. Har testat olika webbläsare/cookieinställningar och olika maskiner. Nästan alltid samma problem.

I min header-fil som laddas först av allt på varje sida ser koden ut så här:

<?php
#phpinfo();

$ip = getenv("REMOTE_ADDR");

#if ($ip <> 'IP-adress') {
#	exit("<b>Just nu pågår underhåll av Flygfyren.nu. Välkommen åter!</b>");
#	}

######### STARTAR SESSIONEN ##########################################

ini_set("session.gc_maxlifetime", "5400");
session_start(); # Startar sessionen på aktuell sida.
$sessionID = session_id();
#echo ini_get("session.gc_maxlifetime"); 

##### INCLUDE-FILER ##################################################
include $_SERVER['DOCUMENT_ROOT']."/XXX";

##### ÖPPNAR DATABAS OCH VÄLJER DATABAS ##############################

##### TÖMMER SESSIONER SOM EJ ÄR AKTIVA ##############################
deleteInactiveUsers();

######### KONTROLLERAR OM SESSIONEN ÄR TOM FÖRSTA GÅNGEN #############
if(empty($_SESSION["username"])) { // Kontrollerar om sessionen "Username" är tom eller ej. //OR empty($_SESSION["membershiplevel"])
	
	$_SESSION["username"] = "Gäst"; // Om sessionen är tom sätts användarnamnet till Gäst i systemet.
	$_SESSION["membershiplevel"] = 5; // Om sessionen är tom sätts medlemsnivån till 5 i systemet. Den lägsta.	
	$_SESSION["active"] = false; // I systemet hanteras Gästen som icke aktiv.
	$_SESSION["sessionID"] = session_id(); //Sessions-ID tilldelas
	#echo "SESSION ID: ".$_SESSION["sessionID"];

Är det något som ser uppenbart fel som skulle kunna leda till att användarna upplever de problem som är beskrivna ovan?

Kan tillägga att det inte finns någon cookiehantering implementerad på sidan.

Mvh
Fredrik

GildebrandMedlem sedan juni 2009920 inlägg
#2

Du måste lägga session_start() högst upp, utan whitespace mellan

lillebrorMedlem sedan apr. 20041 597 inlägg
#3

vad menar du med "whitespaces"? vad får det för effekt så som det är nu, om man inte lägger session_start() högst upp?

metalboyMedlem sedan jan. 2005953 inlägg
#4

Gildebrand skrev:

Du måste lägga session_start() högst upp, utan whitespace mellan

Nej, det är fel. session_start() måste ligga innan någon output skickas till besökaren, och det gör den nu.

lillebrorMedlem sedan apr. 20041 597 inlägg
#5

Ok .Tolkar det som att just session_start() ligger rätt kodmässigt. Vad kan de här problemen som använderna upplever med sessionshanteringen bero på?

PeddaMedlem sedan juni 20006 032 inlägg
#6

Ser inget direkt fel i den kod du har postat. Funderar på om det kan vara något i funktionen deleteInactiveUsers() som kan påverka.
Kan du posta koden för funktionen också?

lillebrorMedlem sedan apr. 20041 597 inlägg
#7

Jag har några medlemmar som verkar ha lite kunskaper om hur sessioner fungerar i PHP. De säger så här:

Anledningen till att det orsakar problem, är att du loggar in på flygfyren.nu, och sedan blir redirectad till https://www.flygfyren.nu när du klickar på en länk. Observera att det är huvudmenyn jag syftar på, många andra länkar fungerar som de ska. Felet orsakas genom att sessionen är per subdomän, alltså gäller inte din session för https://www.flygfyren.nu om du loggar in på flygfyren.nu.

Och så här:

ZeTA har helt rätt. När man loggar in på flygfyren.nu och inte https://www.flygfyren.nu så inträffar problemen. Jag loggade ut från flygfyren.nu (menyn pekar på http://www.flygfyren.nu/logout.php) och jag låg kvar i listan. Skrev jag manuellt in flygfyren.nu/logout.php så blev jag utloggad. Nice.

Problemet verkar uppstå när användarna loggar in via flygfyren.nu och inte https://www.flygfyren.nu.

125 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)