PHP Weiterleitungsschleife verhindern

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi ich bins schon wieder :D

Mein Login funktioniert nun recht gut :)

Wenn der User sich eingeloggt hat, soll egal auf welcher berechtigten Seite er ist, oben die UserId in der Adressleiste stehen.

Dazu binde ich auf jeder Seite die benutzercheck.inc.php ein, die die Session prüft und die UserId danach in die Adressleiste schreiben soll:
PHP:
<?php
	session_start();
	if(empty($_SESSION['benutzer']))
	{
		logout();
		session_destroy();
		header('Location: ../../index.php?abgewiesen=true');
	}
	else header('Location: ?userid='.$_SESSION['userid']);
	function logout()
	{
		include_once('../../include/db/db_connect.inc.php');
		connect();
		$sql="UPDATE users
		SET UserSession=NULL
		WHERE UserSession='".session_id()."'";
		mysql_query($sql);
		mysql_close($con);
	} 
?>

Nur dadurch, dass diese Datei immer bei Seitenaufruf includiert wird, erkennt der die Session und leitet wieder auf dieselbe Seite zurück und die Datei wird wieder includiert und dann geschieht der gleiche Vorgang erneut und erneut und erneut....

Wisst ihr nen Rat dazu, wie ich die UserId auf jeder Seite einfügen kann in die Adressleiste?
 
Und wieso soll die Userid in der Adresszeile stehen? Das ist doch völlig sinnlos. Ansonsten prüf halt, ob der GET-Parameter existiert und mach die Weiterleitung nur wenn er eben nicht exisitert.
 
also das is etwas merkwürdig der code, würde mich vieelicht nochmal nen login tutorial system zu herzen nehmen
 
Da müsstest du evtl. an der PHP.ini schrauben oder falls du darauf keinen Zugriff hast den Befehl in den entsprechenden PHP-Dateien zu Beginn immer überschreiben.

Der Befehl lautet session.use_trans_id und müsste dann auf 1 gestellt werden, dann wird die Session-ID an jeden Link angehängt.
 
Hanni2k schrieb:
also das is etwas merkwürdig der code, würde mich vieelicht nochmal nen login tutorial system zu herzen nehmen

Ich hab vorher nen Tutorial genommen und das hat vorne und hinten nicht funktioniert.

Hab jetzt unser kleines PHP-Schulbuch zur Hilfe genommen :-)

Das heißt Online-Projekte mit PHP und MYSQL ^^

Naja ich glaub ich lass das einfach das oben in die Linkleiste zu schreiben...xD
Das müsste doch klappen wenn ich die UserID einfach der $_SESSION['userid'] übergebe und die dann auf jeder Seite wieder auslesen kann oder?

@Mr. Snoot
Ich wollte die UserId in die Linkleiste schreiben, nicht die Session-ID... ^^
Jeder User hat in meiner Tabelle eine eigene UserId bekommen mit der auto_increment funktion

Und an Hand der User-Id kann ich dann den User schnell raussuchen aus der Datenbank
Session-Ids sind mir zu lang um die in der Adressleiste zu schreiben...^^
 
Zuletzt bearbeitet:
Und wieso muss die UserID in der Adressleiste stehen? Kann ich dann als böser User nicht einfach eine andere UserID hinschreiben und somit den Account eines Fremden nutzen?
Speicher die UserID doch in der Session-Variable. Wenn ein User Cookies aktiviert (was wohl der Normalfall ist) hat sieht er auch keine SessionID in der URL.
 
So wie ich das sehe steht die UserID bereits in der Session und wird nur aus dekorativen zwecken in die Adressleiste eingefügt?

Wenn ich dich jetzt richtig verstehe ist dein Problem das du das Script immer includierst und er dann durch die zeile
Code:
else header('Location: ?userid='.$_SESSION['userid']);
immer wieder die Seite neu aufruft?

Wenn das so sein sollte, dann schau doch einfach ob die Variable userid bereits angegeben ist mit
Code:
 else if (!isset($_GET['userid'])) header('Location: ?userid='.$_SESSION['userid']);
 
ich würde in der includer ne abfrage machen

PHP:
if(defined('LOGIN_REQUIRED') && LOGIN_REQUIRED==TRUE)
{

// Kontrolle ob User eingeloggt ist, ggf. weiterleitung auf eine login.php

}

Nun machst du auf jeder seite wo der benutzer eingeloggt sein muss (jeweils vor den Includes):

PHP:
define('LOGIN_REQUIRED', TRUE);

Muss der benutzer nicht eingeloggt sein (z.B auf der login.php)

kommt ein

PHP:
define('LOGIN_REQUIRED', false);
 
Zurück
Oben