Problem mit redirect

Hallo


ich habe auf meiner Seite ein Problem mit redirect...


Und zwar gibt es 2 verschiedene Wege, die ich ein User auffordere sich einzuloggen. Der erste und übliche ist, wenn er auf den Button "Einloggen" drückt...

Der 2. ist, wenn er eine Seite betreten möchte, die ich geschützt habe, dann wird er auf die Logon verwiesen, um sich einzuloggen.

Wenn er sich normal anmelden möchte kommt der Text: Log dich ein
Wenn er eine geschützte Seite betreten will, obwohl er nicht eingeloggt ist, dann kommt die Meldung: Um diese Seite betreten zu können, musst du dich einloggen.



Der Sprung auf die Logon.php funktioniert mit der richtigen Textausgabe, nur eben nicht der Rücksprung auf die Seite, die der User vorher betreten wollte.
Beispiel:
geschützte Seite = ?site=protect
User ist nicht eingeloggt und möchte die Seite ?site=protect betreten
User wird auf Logo.php verwiesen mit Textausgabe: Um diese Seite betreten zu können, musst du dich einloggen
User loggt sich ein
Anstatt jetzt auf die Seite ?site=protect zu kommen, wird er auf die Startseite verwiesen


Irgendetwas läuft da nicht so, wie ich es gerne hätte....

Würde mich freuen, wenn mir jemand einen kleinen Denkanstoß geben könnte... Bin auch ein Anfänger was das angeht, also seiht bitte nachsichtig... :)



Hier mein Code:
Code:
//das brauch nicht beachtet werden, ist nur für Sprachumschaltung und Textinclude...
<?php
error_reporting(E_ALL);

if (!isset($_SESSION)) {
	session_start();
	}
if ( !isset($_SESSION['lang_session']) )
	{
	$_SESSION['lang_session'] = "de";
	$absolute_include="lang/lang_de.php";
	$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
	if($folder_depth == false) $folder_depth = 1;
	@include(str_repeat("../", $folder_depth - 1) . $absolute_include);
	}
else if( isset($_SESSION['lang_session']) )
	{
	$absolute_include="lang/lang_".$_SESSION['lang_session'].".php";
	$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
	if($folder_depth == false) $folder_depth = 1;
	@include(str_repeat("../", $folder_depth - 1) . $absolute_include);
	}
else
	{
	$_SESSION['lang_session'] = "de";
	include("lang/lang_de.php");
	}
//ende Sprachinclude und umschlatung

// Ab hier ist die Funktion mit dem redirect
if (isset($_SESSION['redirectLink'])) {
	$redir_target = $_SESSION['redirectLink'];
	$login_text = $lang['login9'];
}
else {
	$redir_target = '/index.php';
	$login_text = $lang['login1'];
}
unset($_SESSION['redirectLink']);
?>



Und das steht in dem File, das von den zu schützenden Seiten am Anfang der Seite angefordert wird... via require_once
Code:
<?php

// Wenn Session-Cookie besteht auf gültiges Login prüfen
if ($_COOKIE['mycook_sid'])
{
	// Datenbankverbindung herstellen
	require_once($_SERVER['DOCUMENT_ROOT'].'/_................./dbDaten.class.php');
	$db =& new dbDaten;

	// Datanbank abfragen
	$sql = 'SELECT * FROM phpbb_sessions WHERE session_id = "'.$_COOKIE[mycook_sid'].'" ';
	$session_data = @$db->getRow($sql);
}


// Wenn nicht eingeloggt, Login-Form anzeigen
if (!$_COOKIE[mycook_sid'] || $session_data['session_logged_in'] != '1')
{
	session_start();
	$_SESSION['redirectLink'] = $_SERVER['PHP_SELF'];

	Header('Location: /logon.php');
	exit();
}

?>

vielen Dank schonmal
euer Monchichi
 
Zuletzt bearbeitet:
Verwende $_SERVER['REQUEST_URI'] statt $_SERVER['PHP_SELF']:
PHP:
$_SESSION['redirectLink'] = $_SERVER['REQUEST_URI'];
Zudem solltest du dich gegen SQL-Injektinen schützen.
 
Funktioniert bestens, Danke Gumbo.

Verstehe aber nicht warum es vor kurzem noch lief aber jetzt nicht mehr....

Kann das sein, dass der Provider irgendwas am PHP Server geändert hat? Version oder so...



Was hat das mit der sql Sache auf sich? Kann dort was passieren?
 
Generell musst du davon ausgehen, dass alle vom Client gesendete Daten schädliche Werte enthalten können. Das gilt also auch für Cookies.
 
Falls möglich ja. Andernfalls sollten die übergebenen Werte ausreichend geprüft und verarbeitet werden.
 
Ok, danke schonmal dafür..

Noch kurz eine grundlegende Frage: Da ich das Login script eines phpbb Forums für meine Startseite nutze, und das phpbb forum nunmal auf cookie Basisi arbeitet ist das glaube ich nicht möglich.


Ist das denn in anderen Foren anders? ZB vbulletin? Wollte mir sowieso ein vbulletin aufsetzen. Oder arbeitet man generell mit cookies? Ist das in jedem Forum System so?
 
$_COOKIE ist nicht weniger gefährlich als $_POST, $_GET oder $_SESSION, wenn du es nicht überprüfst. Cookievalues können genauso "individualisiert" werden, wie zB Werte, die du in ein Formularfeld eingibst. Das heißt aber nicht, dass du COOKIE-Values weniger praktisch überprüfen und verwerten könntest.

Gumbo: Cookies sind meiner Meinung nach nur dann von Nachteil, wenn der Client sie nicht unterstützt. Im Grunde muss irgendwie eine Session identifiziert werden. Das geht über Cookies, einen URL-Parameter oder eine Browser- & IP-Kombination. Finde Cookies recht nützlich, da dezent und effizient. Von daher verstehe ich deine Abneigung gegen Cookies nicht - Speziell wenn es um ein Standard-Diskussionsforum geht, welches nun mal Authentifikationsprozesse verarbeiten können muss.

vBulletin arbeitet übrigens über eine Mischung aus allen drei erwähnten Möglichkeiten zur Sessionverifikation, wobei es zwischen GET-Parameter und Cookie dynamisch wandeln kann.
 
Cookies werden bei jeder Anfrage an den Server übermittelt. Das bedeutet nicht nur eine höhere Übertragungsmenge bei jeder Anfrage sondern vor allem auch eine erhöhte Datenunsicherheit. Dass Cookies häufig missbräuchlich eingesetzt werden, erhöht diese Unsicherheit nur noch weiter. Denn aus Bequemlichkeit werden dort schnell sensible Daten wie Passwörter (womöglich noch als Klartext) oder andere personenbezogenen Informationen hinterlegt, die dort eigentlich nichts zu suchen haben. Und dass Cookie-Daten ebenso wie alle anderen Benutzereingaben geprüft werden müssen (und das jedes Mal), ist noch weniger bekannt als dass per GET- und POST-Methode übermittelte Daten es müssen.
 
Zurück