Mal wieder Prob. Diesmal Sessions :)

Kermit

Enthusiast
Thread Starter
Mitglied seit
14.07.2002
Beiträge
1.708
Ort
Schwarzwald!!! und Karlsruhe
Hi Leute
Ich versuch mich gerade an Session Funktionen und soweit klappt das ganze auch. Das einzige Prob is, dass es irgendwie nur über die URL funzt, also nich über Cookies. Wenn man sich auf meiner Seite einloggt und dann auf zurück klickt (im Browser) dann is die Session ID halt nich dabei aber das Script erkennt, dass eine Session besteht und zeigt dann, so wie es soll, "Hallo," an. Würde jetzt in der URL noch die Session ID stehen, dann würde da z.B. "Hallo, Kermit" stehen. Wieso liest das Script das nicht einfach aus dem Cookie aus, so wie es z.B. hier im Forum auch gemacht wird (wird es doch, oder? :hmm:)?

Hier mal der Code:

index.php:
PHP:
<?php
	@session_start();
	if(!session_is_registered('nick')){
		$session_da = 0;
	}
	else{
		$session_da = 1;
		$nick = $HTTP_SESSION_VARS['nick'];
	}
	echo "<table width = '900' border = '0' cellpadding = '0' cellspacing = '0'>";
	// LOGIN FORMULAR |A|
	echo "<tr height = '50'><td width = '100%' colspan = '3' background = 'login_bg.gif' valign = 'bottom'>";
	if($session_da = 0){
		echo "<form action = 'login.php' method = 'post'>";
		echo "<font id = 'schrift1'>  Nick: <input class = 'text1' name = 'nick' type = 'text' size = '16' maxlength = '40'>  ";
		echo "Passwort: <input class = 'text1' name = 'pass' type = 'password' size = '16' maxlength = '40'>   ";
		echo "<input class = 'button' name = 'go' type = 'submit' value = 'login'>   ";
		echo "<a href = 'forgot_pass.php'>Passwort vergessen?</a> || <a href = 'register.php'>Registrieren</a></form></font>";
	}
	if($session_da = 1){
		echo "<form action = 'logout.php' method = 'post'>";
		echo "<font class = 'text1'>Hallo, $nick</font>";
		echo "<input class = 'button' name = 'go' type = 'submit' value = 'logout'></form>";
	}
	// LOGIN FORMULAR |E|
	echo "</td></tr><tr height = '100'><td width = '900' colspan = '3' background = 'logo_bg.gif'> ";
	echo "</td></tr>";
	echo "<tr><td width = '100' background = 'pixel.gif' valign = 'top'><iframe frameborder = '0' src = 'neuste_pics.php' width = '100' height = '600' name = 'neuste_pics'>";
	echo "<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen!</p></iframe></td>";
	echo "<td width = '680' background = 'pixel.gif'><iframe frameborder = '0' src = 'news.php' width = '680' height = '1000' name = 'neuste_pics'>";
	echo "<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen!</p></iframe></td>";
	echo "<td width = '120' background = 'pixel.gif'>Werbebanner</td></tr>";
?>

login.php:
PHP:
<?php
	@session_start();
	$db = mysql_connect("localhost", "xxxxxxxx", "xxxxxxxx");
	$res = mysql_db_query("xxxxxxx", "SELECT nick, pass FROM user_db WHERE nick = '$nick'");
	$num = mysql_num_rows($res);
	if($num == 0){
		echo "Nick nicht vorhanden!";
	}
	else{
		$nick_db = mysql_result($res, 0, "nick");
		$pass_db = mysql_result($res, 0, "pass");
		if($nick_db == $nick && $pass_db == $pass){
			echo "Hallo, $nick";
			session_register("nick");
			session_register("pass");
		}
		else{
			echo "Falsches Passwort!";
		}
	}
	mysql_close($db);
	echo "<a href = 'index.php'>Zurück</a>";
?>

logout.php:
PHP:
<?php
	@session_start();
	session_destroy();
	if(!session_is_registered('$nick')){
		echo "Juhu hat gefunzt";
	}
	else{
		echo "Scheiße fehlgeschlagen!";
	}
?>

Hier noch die Site. Könnter das evtl. besser nachvollziehen, was ich meine (Nick: dada, Pass: 1234) Klick

Thx
Alex
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Langsam blibk ich gar nichts mehr :fresse:

Manchmal klappts. Ich log mich ein, klick im Script auf "zurück" (da is dann gleich die Session ID dabei) und dann steht da auch "Hallo, Kermit". Das klappt soweit ganz gut nur wenn ich mich jetzt auslogge, dann kommen manchmal die Eingabefelder für Nick und Passwort oder es steht nur "Hallo," da. Wieso is das so? Mit der logout.php wird die Session Datei doch gelöscht, oder? Das Script überprüft das ja sogar nochmal und laut der Ausgabe is auch alles gut gegangen. Kommt ja auch kein PHP Fehler oder so. Warum findet die index.php dann trotzdem noch was? :confused:

EDIT: Hab grad alle Session Dateien vom Server gelöscht (die im tmp Verzeichnis) und alle Cookies usw. auf meinem Rechner. Wenn ich jetzt die index.php aufrufe, dann zeigt er mir wieder nur "Hallo," an, statt den Login Feldern, wie es eigentlich sein sollte. Woran liegt das???
 
Zuletzt bearbeitet:
versuch dir ne eigene sessionverwaltung zu implementieren...dann kommst du fehlern schneller auf die spur als über die php internen sachen...

und soviel aufwand isses ja nicht
 
ähm... eigene sessionverwaltung??? :confused:

Kann mir da im Mom nich vorstellen, wie die funzen soll usw. :confused:

Hast du dazu evtl. nen Beispiel oder so???

Thx
Alex
 
was sollen deine sessions denn machen? du willst nur eine userid festhalten und anhand von der überprüfen ob der user eigeloggt ist, oder?

wenn er user das erste mal auf die seite geht einen md5 hash erzeugen und denn dann die die datenbankschreiben und als cookie oder var übergeben. wenn der user sich einloggt wird ein feld "userid" in der session tabelle einfach auf die id des user gesetzt (bei eben dem vorhin erzeugten hash) ... jetzt muss du immer nur abfragen ob die userid gesetzt ist oder nicht und schon weisst du ob der user drin ist oder nicht
 
PHP:
function registerSession()
{
  $sessionID = genSessionID();

  $sessionTimeout = time() + 3600;
  $sessionInsertSQL = "INSERT INTO sessions
                       (
                         sess_sessionID,
                         sess_user,
                         sess_timeout,
                         sess_ip
                       )
                       VALUES
                       (
                         '$sessionID',
                         '',
                         '$sessionTimeout',
                         '" . getenv("REMOTE_ADDR") . "'
                       )";

  $sessionResult = sql($sessionInsertSQL);

  return($sessionID);
}

  function kookLogin($scoutHash, $sessionID)
  {
    $sql = "select * from scouts where scout_hash = '$scoutHash' AND scout_cookie = '1'";
    $login = new mysql();
    $login->Query($sql);
	$login->execRow();
	if($login->rows == 1)
	{
      $sql = "delete from sessions where sess_scoutID = '" . $login->RSArray["scout_id"] ."' ";
      $login->Query($sql);
	  updateSession($sessionID, $login->RSArray["scout_id"]);
    }  
  }

function genSessionID()
{
  mt_srand((double)microtime()*1000000);
  $part1 = mt_rand();
  $part2 = str_replace(".", "", $REMOTE_ADDR);
  $sessionID = md5($part1 + "lalalhuibuh" + $part2);
  return $sessionID;
} 

function sessionIsRegistred($sessionID)
{
  $result = sql("SELECT user_id, user_uname FROM sessions inner join users on  sess_user = user_id WHERE sess_sessionID = '$sessionID'");

  if(strlen($result[0]["user_uname"]) > 0) 
  {
    $ret["userId"]   = $result[0]["user_id"];
    $ret["userNick"] = $result[0]["user_uname"];
    
    return $ret;
  }
  else
  {
    return false;
  }
}  

function updateTimeout($sessionID)
{
  sql("UPDATE sessions set sess_timeout = '" . (time() + 3600) . "'  WHERE sess_sessionID = '$sessionID'");
}
  
function killTimedout()
{
  sql("DELETE FROM sessions WHERE sess_timeout <= '" . time() . "'");
}
  
function login($user, $pass, $sessionID)
{
  $result = sql("select * from users where user_uname = '$user' and user_pass = '" . md5($pass) . "'");


  if($result["rows"] == 1)
  {
    updateSession($sessionID, $result[0]["user_id"]);
    return true;
  }
  else
  {
    return false;
  }
}

function updateSession($sessionID, $id)
{
  sql("UPDATE sessions set sess_user = '$id'  WHERE sess_sessionID = '$sessionID'");
}
 
meine sessionverwaltungsmethoden...wäre schöner in einer klasse, aber man kann ja nicht alles haben...

den aufbau der sessiontabelle hab ich jetzt aber nicht da...

die methode sql() jetzt einen query ab und liefert alle results als array zurückl
 

Ähnliche Themen

Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh