Loginscript | User bleibt nicht eingeloggt

real-insanity

Erfahrenes Mitglied
So habe das Script geschrieben:
PHP:
<?php
$sql = "SELECT ID,Name,PW FROM user WHERE Name='".$_POST['User']."' AND PW=md5('".$_POST['password']."')"; 

$result = mysql_query($sql) OR die(mysql_error());

if(isset($_POST['User'],$_POST['password'],$_POST['submit'])){
	session_start();
	if(mysql_num_rows($result)>0){
		$row = mysql_fetch_array ($result);
		$_SESSION["user_id"] = $row["ID"]; 
		$_SESSION["user_nickname"] = $row["Name"]; 

		echo '<br>Hallo: <b>'.$_SESSION["user_nickname"].'</b><br>';}
	else{
		echo "<br>User und PW stimmen nicht überein <br><br>";}}
		
if(!isset($_SESSION["user_nickname"])){
echo '<table border="0" margin="0" cellspacing="0" cellpadding="0">
		<tr>
			<td><form action="?section=login" method="post"><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
			<td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
			<td><input type="image" src="images/buttons/login.jpg" name="submit" value="Login"></td>
			<td><input type="image" src="images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></form></td>
		</tr>
		 </table><br>';}
?>

Also er soll das Hallo $_SESSION["user_nickname"] solange anzeigen bis die Session abgelaufen ist, also praktisch eingeloggt bleiben. Und erst wenn die Session abgelaufen ist soll er das Formaular anzeigen. Aber i-wie bekmm ich es net hin ... :(
 
Also das Einloggen an sich klappt, wechsel ich jedoch zu einer anderen Seite steht oben wieder das Formular, obwohl der User, der sich soeben angemeldet hatte, eingeloggt bleiben soll. Solange wie die Session gegeben / gesetzt ist.
 
ja ist drinne:
PHP:
if(isset($_POST['User'],$_POST['password'],$_POST['submit'])){
    session_start();
    if(mysql_num_rows($result)>0){
 
Hallo,
eine andere Fehlerursache wäre, dass du Cookies nicht akzeptiert werden und du die Session ID nicht weitergibst.

mfg
forsterm
 
Benutzt du session_start() immer oder nur direkt nach dem Login? Die Funktion wird auch benötigt um eine bereits gestartete Session wieder aufzunehmen. Also am einfachsten wäre es, wenn du immer sofort am Anfang jeder Seite session_start() aufrufst, auch wenn du damit ein paar Cookies an unschuldige Besucher verteilst, die den Login nicht verwenden.

So spontan ist mir auch keine vernünftige Alternative eingefallen, session_id() scheint vor session_start immer leer zu sein. Ansonsten könnte man noch $_REQUEST['PHPSESSID'] überprüfen, das könnte dann so aussehen:

PHP:
if ($_REQUEST['PHPSESSID'] != '') {
  session_start();
}

Da bin ich mir aber nicht sicher, ob das auch funktioniert, wenn die Session-ID per GET übertragen wird. Kann das jemand bestätigen?
 
also das klappt jezz habe nen freund angerufen der hatte mir geholfen:
PHP:
<?php
session_start();
if(isset($_REQUEST['action'])=="logout"){
	unset($_SESSION['user_id']);
	session_destroy();}

if (isset($_SESSION['user_id'])) {
	echo '<br>Hallo: <b>'.$_SESSION["user_nickname"].'</b><br>Deine User-ID: '.$_SESSION['user_id'].'<br><br>';
	echo '<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <form action="?section=login&action=logout" method="post">
            <td><input type="image" src="http://www.tutorials.de/forum/images/buttons/logout.jpg" name="submit" value="Login"></td></form>
        </tr>
         </table><br>';} 
else { 
echo '<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <td><form action="?section=login" method="post"><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
            <td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
            <td><input type="image" src="http://www.tutorials.de/forum/images/buttons/login.jpg" name="submit" value="Login"></td>
            <td><input type="image" src="http://www.tutorials.de/forum/images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></form></td>
        </tr>
         </table><br>';}

if(isset($_POST['User'],$_POST['password'],$_POST['submit'])){
	$sql = "SELECT ID,Name,PW FROM user WHERE Name='".$_POST['User']."' AND PW=md5('".$_POST['password']."')"; 
	$result = mysql_query($sql) OR die(mysql_error());

    if(mysql_num_rows($result)>0){
        $row = mysql_fetch_array ($result);
        $_SESSION["user_id"] = $row["ID"]; 
        $_SESSION["user_nickname"] = $row["Name"];}
    else{
        echo "<br>User und PW stimmen nicht überein <br><br>";}}
?>

das einloggen klappt, die session übernehmen und auch das ausloggen :)
 
Zuletzt bearbeitet:
kann man an dem script i-wie was verbessern oder so?! Weil i-wie muss ich mich sozusagen 2 mal einloggen, nach dem ausloggen, bis ich dann endlich eingeloggt bin o.o
 
Zurück