$_SESSION Daten gehen teilweise verloren

afterwhoru

Grünschnabel
Hallo,
ich habe ein kleines Problem und finde irgendwie den Fehler nicht .

Ich habe eine webseite geschrieben die ein login system beinhaltet.

Das Login System funktioniert auch astrein.

Nachdem der User eingeloggt wird , werden 2 Session Variablen angelegt :

Code:
mysql_select_db($forumdbname,$conn_forumdb);
	$query = "SELECT uid, username, password, salt FROM mybb_users WHERE username = '".$userid."'";
	$result = mysql_query($query,$conn_forumdb);

	$userdata = mysql_fetch_array($result,MYSQL_ASSOC);

	$user_id = $userdata["username"];
	$usernr = $userdata["uid"];
	
	$_SESSION["username"] = $userid;
	$_SESSION["uid"] = $usernr;

Diese Datei login.php wird auf der hauptseite in einem bestimmten bereich included , der content wird ebenfalls in einem anderen bereich included.

Wenn ich mich einlogge , gibt es einen Link zu einem Spielerprofil , damit das profil funktioniert wird die usernummer übergeben (also per link) .

Hier mal die logged funktion :
Code:
function print_logged(){
	global $userid, $userdata ;
	
	echo "<b>".$_SESSION["uid"]."</b>";
	echo "
	
	<font face=\"Arial\">
	<b><font size=\"2\" color=\"#666666\"> Willkommen ".$_SESSION["username"]." !
	<a href=\"diary/diary_list.php?uindex=".$_SESSION["uid"]."&ucindex=".$_SESSION["uid"]."&cindex=".$_SESSION["uid"]."\" > Mein Player Gästebuch</a></font></b> ";
             }

So jetzt kommts : wenn ich mich einlogge , ist der link auch korrekt da und die werte bei cindex , uindex und ucindex stimmen auch .

Klick ich aber irgendeinen link an , sind die Daten von $_SESSION["uid"] weg , aber die Daten von $_SESSION["username"] sind noch vorhanden (sprich die session existiert noch).

Da die content dateien nur included werden , brauch ich nur auf der index.php session_start(); anzugeben was natürlich auch direkt am anfang der Seite integriert ist.

Und "ini_set ('error_reporting', E_ALL); ini_set ('display_errors', TRUE);" brachte auch bzgl. der Session keine Fehler.

Hat da jemand ne idee ?
 
Möglicherweise liegt es an den unterschiedlichen Variablennamen, die du in deinem Skript verwendest.
 
Wenn ich das richtig sehe, hast du eine Unterstrich vergessen -> sowas "_".

Aber wenn du sagt, dass die andere Session fehlt, also die UID, dann seh ich da auch momentan kein Problem. Lass sie dir mal beim Login ausgeben oder so und schau nach, ob sie da auftaucht.

Viel Erfolg,
Florian

___________________________________

Webdesign Krefeld
 
Danke erstmal für die Antworten .

Code:
$user_id = $userdata["username"];
	$usernr = $userdata["uid"];
	
	$_SESSION["username"] = $userid;
	$_SESSION["uid"] = $usernr;

Ich glaub ich hab gerade was gefunden , obwohls nicht logisch wäre ;)

ich seh gerad das ich der session username die variable $userid zugewiesen habe und die daten aber in $user_id ..das komische ist nur , das ja $_SESSION["username"] trotzdem einwandfrei funktioniert .. nur $_SESSION["uid"] nicht , aber evtl. stört er sich ja trotzdem irgendwie dran ;)

@new_arts_websoluti : ja hab ich gemacht , also das mit der ausgabe , das ist ja irgendwie der witz ;)
Wenn du dich einloggst , spuckt er die nummern ohne murren aus , klickst du nach dem login irgendeinen link an , als beispiel index.php?cat=main (welches die content seite main.php aufruft bzw. included), sind die daten von $_SESSION["uid"] weg.

Falls noch einer ne Idee haben sollte , kann er es ja mal posten ,ich korrigier gleich erstmal den fehler und wenns dann klappt schreib ichs hier rein ;)

EDIT : Soa hab es gerad mal getestet , also daran lag es nicht.

Mich wundert das auch ein wenig , da ein fast identisches Script (mit einem zusätzlichen check ob user admin ist ) , für das Admin Portal verwendet wird , und da klappt die ausgabe der ID (so und auch in der url) und ich kann mich durch klicken wie ich lustig bin -.- .
 
Zuletzt bearbeitet:
@Acriss : nein nur auf der index.php , weil der rest included wird . Daher wird für jede unterseite (die im content ausgegeben wird) kein session_start benötigt.

Ich hatte es testweise trotzdem mal auf ein paar unterseiten gesetzt -> gleicher effekt.

Ich versteh das irgendwie auch nicht lol , ich hab mir das login.php script vom admin portal angesehen und verglichen und das gleich einem ei dem anderen .

Er stellt die session ja auch her , nur behält der sie irgendwie über die links nicht sobald ich nur einen link anklicke .

Als beispiel wird bei der index.php der content über die variable cat= per $_GET ausgespuckt sprich index.php?cat=newsview , dahinter steht nur das include("news/newsview.php");
 
Ist session_start(); auch so geschrieben? Tippfeh?er usw könen ganz miese Folgen haben ;)

Sonst fällt mir noch error_reporting(E_ALL); ein.
Setze das mal ganz an den Anfang des Scriptes.
 
Wenn dieser Algorithmus ohne Bedingung bei jedem Aufruf ausgeführt wird, schlägt die Datenbankabfrage bei fehlendem $userid-Variablenwerts fehl beziehungsweise liefert keinen Datensatz, worauf die Variable $userdata den Wert false besitzt und $userdata["username"] und $userdata["id"] folglich nicht existieren (da $userdata ja kein Array ist), was somit dem Wert null gleichzusetzen ist.
Die Variablen $_SESSION["username"] und $_SESSION["uid"] erhalten somit bei einer gültigen Datenbankabfrage mit der Rückgabe eines gpltigen Datensatzes den Wert der Variable $userid beziehungsweise $usernr (also $userdata["id"]). Bei ungültiger Abfrage beziehungsweise einer Abfrage ohne gültigen Datensatz wird $_SESSION["uid"] mit null gesetzt und $_SESSION["username"] erhält wieder den Wert der $userid-Variable.
 
Auf Grund der Aussage von Gumbo, versuche es mal so ;)

PHP:
if (!isset($_SESSION['username']) && !isset($_SESSION['userid']) )
{
mysql_select_db($forumdbname,$conn_forumdb);
	$query = "SELECT uid, username, password, salt FROM mybb_users WHERE username = '".$userid."'";
	$result = mysql_query($query,$conn_forumdb);

	$userdata = mysql_fetch_array($result,MYSQL_ASSOC);

	$user_id = $userdata["username"];
	$usernr = $userdata["uid"];
	
	$_SESSION["username"] = $userid;
	$_SESSION["uid"] = $usernr;
}

!isset bedeutet, wenn die Variable nicht gesetzt ist.
isset bedeutet, dass sie gesetzt ist ;)
 
Zuletzt bearbeitet:
Da ich vermute, dass $userid das globalisierte Pendant zu einer EGPCS-Variable ist, schlage ich Folgendes vor:
PHP:
if( isset($_GET['userid']) && !isset($_SESSION['username']) && !isset($_SESSION['userid']) ) {
	mysql_select_db($forumdbname, $conn_forumdb);
	$query = "SELECT uid, username, password, salt FROM mybb_users WHERE username = '".mysql_real_escape_string($_GET['userid'])."'";
	$result = mysql_query($query,$conn_forumdb);
	if( $userdata = mysql_fetch_assoc($result, MYSQL_ASSOC) ) {
		$_SESSION["username"] = $userdata["username"];
		$_SESSION["uid"] = $userdata["uid"];
	}
}
 
Zurück