Session Problem bei Aktivierungsscript

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich habe mir ein kleines Script zur Aktivierung von Accounts erstellt. Nachdem der Account aktiviert worden ist muss der benutzer ein Kennwort eingeben. Nach klick auf "Speichern" im Formular wird das Kennwort gespeichert. Allerdings verliere ich die SESSION-Variable "userid". Woran kann das liegen? Das Script wird per include() in mein "HTML Template" (kein wirkliches Template) geladen, wo auch session_start() gesetzt ist. Ich verstehe das einfach nicht! Ich hoffe ihr könnt mir helfen. Wer das live sehen will kann mir eine PN schicken.

Hier mal das Script:
PHP:
<?php
$errormessages = array();
$i = 0;
$error = false;

function check_passwordlength($password)
{
	if(strlen($password) >= 5)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function randString( $length=12, $charset='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' )
{
	$retVal = '';
	$cardinality = strlen($charset);
	for( $i=0; $i<$length; $i++ )
	{
		$retVal .= $charset{mt_rand()%$cardinality};
	}
	return $retVal;
}


if(isset($_POST["submit"]))
{	
	$password = strip_tags($_POST["password"]);
	$password2 = strip_tags($_POST["password2"]);
	
	if($password == "")
	{
		$error = true;
		$errormessages[$i] = "Bitte geben sie ein Passwort ein<br />";
		$i++;
	}
	else
	{
		if(!check_passwordlength($password))
		{
			$error = true;
			$errormessages[$i] = "Das Passwort ist zu kurz. Passwörter müssen mindestens 5 Zeichen enthalten!<br />";
			$i++;
		}
	}
	
	if($password != $password2)
	{
		$error = true;
		$errormessages[$i] = "Die Passwörter stimmen nicht überein!<br />";
		$i++;
	}
	if(!$error)
	{
		print_r($_SESSION);
		$offset = randString();
		$password .= $offset;
		$sql = "UPDATE nk_users SET offset = '".mysql_real_escape_string($offset)."', password = '".mysql_real_escape_string(hash("md5",$password))."' WHERE userid = ".mysql_real_escape_string($_SESSION["userid"]);
		echo "<br />".$sql."<br />";
		mysql_query($sql) or die ("Error: ".mysql_error());
		//header("Location: http://www.codegroup.de/Privat/Radhad/netkicker/pwchanged");
	}
}
if(isset($_GET["key"]) && $_GET["key"] != "")
{
	$sql = "SELECT userid FROM nk_users WHERE activationkey = '".mysql_real_escape_string($_GET["key"])."'";
	$ressource = mysql_query($sql) or die ("Error: ".mysql_error());
	$user = mysql_fetch_assoc($ressource);
	
	$_SESSION["userid"] = $user["userid"];
	print_r($_SESSION);
	
	$sql = "UPDATE nk_users SET activationkey = NULL WHERE activationkey = '".mysql_real_escape_string($_GET["key"])."'";
	$ressource = mysql_query($sql) or die ("Error: ".mysql_error());
	
	if(mysql_affected_rows() == 1)
	{
		echo '<h1>Account aktiviert</h1>
		<p>Ihr Account wurde erfolgreich aktiviert.</p>';
	}
	echo '<h1>Passwort eintragen</h1>
	<p>Trage nun dein Passwort ein. Dies muss sofort gemacht werden da du sonst deinen Account nicht nutzen kannst!</p>';

	if(count($errormessages) > 0)
	{
		echo '<p class="errormessages">';
		
		foreach($errormessages as $errormessage)
		{
			echo $errormessage;
		}
		echo "</p>";
	}
}
?>
<form action="activate" method="post">
	<fieldset>
		<p>Passwort:</p><input type="password" name="password" />
		<p>Passwort wiederholen:</p><input type="password" name="password2" />
		<p>&nbsp;</p>
		<input class="FormButton" type="submit" value="Speichern" name="submit" />
	</fieldset>
</form>
 
Bist du dir sicher, dass die Sitzung gestartet wird? Wird die Sitzungs-ID korrekt übergeben und so die vorhandene Sitzung wieder aufgenommen? Kommt es überhaupt dazu, dass der Wert gesetzt wird?
 
also der Wert wird gesetzt, und die Session wird auch gestartet, denn wenn ich in diesem Script oben session_start() verwende, kommt die Meldung von wegen "Notice: a session has been started before" oder so ähnlich. Ich geb jetzt nochmal die Session selbst aus, aber das dürfte ja eigentlich nichts ändern!

[EDIT]
Hmm... ich habe 2 Cookies namens PHPSSID zu der Domain, eigenartig ^^
 
Zuletzt bearbeitet:
Zurück