Seite 2 von 2

Verfasst: 13.11.2006 20:52
von gn#36
Die Ursache des Problems liegt in der pagestart.php im Admin Ordner:

Code: Alles auswählen

if (!$userdata['session_logged_in'])
{
	redirect(append_sid("login.$phpEx?redirect=admin/index.$phpEx", true));
}
else if ($userdata['user_level'] != ADMIN)
{
	message_die(GENERAL_MESSAGE, $lang['Not_admin']);
}

if ($HTTP_GET_VARS['sid'] != $userdata['session_id'])
{
	redirect("index.$phpEx?sid=" . $userdata['session_id']);
}

if (!$userdata['session_admin'])
{
	redirect(append_sid("login.$phpEx?redirect=admin/index.$phpEx&admin=1", true));
}
Der Redirect unterscheidet nicht nach Adminbereich. Andererseits wird aber im Index das Frameset erstellt. Vielleicht wäre es eine Idee, den Redirect weiterhin auf den Index zu leiten, aber dem Index dann eine Info mitzugeben, dass er gleich eine bestimmte Seite aufrufen soll, statt seinen Standardframe für die rechte Seite zu laden. Dann müsste man den Redirect noch in die admin_users.php packen (damit andere Dateien nicht davon betroffen sind) und wäre das Problem los.
In der Index.php ist nicht mal viel Code anzupassen:

Code: Alles auswählen

else
{
	//
	// Generate frameset
	//
	$template->set_filenames(array(
		"body" => "admin/index_frameset.tpl")
	);

	$template->assign_vars(array(
		"S_FRAME_NAV" => append_sid("index.$phpEx?pane=left"),
		"S_FRAME_MAIN" => append_sid("index.$phpEx?pane=right"))
	);

	header ("Expires: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
	header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

	$template->pparse("body");

	$db->sql_close();
	exit;

}
Da muss nur eine IF Abfrage rein ob best. Daten über Get od. POST mitübermittelt wurden, dann der Redirect und fertig. Vielleicht ist es sogar noch besser auf den Index mit speziellen Parametern zu verlinken so dass die Frames auf jeden Fall erstellt werden, denn sonst würde man die ja im "als Admin eingelloggten" Zustand nicht angezeigt bekommen.

Verfasst: 13.11.2006 23:01
von IPB_Flüchtling
Ahoi gn#36,

danke für Deine ausführliche Antwort! Leider muss ich zugeben, dass mich die Realisierung Deiner Lösungsansätze technisch überfordert. :oops:

Wäre es vielleicht einfacher, auf das Nachladen der Frames (also auf den Umweg über die admin/index.php) überhaupt zu verzichten und nach der Eingabe des Passworts für das ACP gleich zur admin_users.php weiterzuleiten? Das wäre im Prinzip nicht wirklich schlimm, weil man das Benutzerprofil ja mittels target="_blank" aufrufen kann, sodass man den Navigationsframe nicht unbedingt benötigt.

Gute Nacht!
Wolfgang

Verfasst: 14.11.2006 00:09
von gn#36
Ich denke schon, dass das einfacher wäre. Wenn ich demnächst mal wieder ein wenig Zeit habe beschäftige ich mich evtl. mal genauer mit der Geschichte.

Verfasst: 14.11.2006 01:04
von color
gn#36 ich habe das nicht so ganz verstanden? war das für mich oder für IPB_Flüchtling

Verfasst: 14.11.2006 11:10
von gn#36
Sorry, das sollte an IPB_Flüchtling gehen.

Verfasst: 14.11.2006 12:30
von IPB_Flüchtling
@gn#36:

Das wäre sehr nett - mir ist das nämlich zu hoch. Vielleicht könnte man in der admin/pagestart.php an dieser Stelle ansetzen:

Code: Alles auswählen

if (!$userdata['session_admin']) 
{ 
   redirect(append_sid("login.$phpEx?redirect=admin/index.$phpEx&admin=1", true)); 
}
Hier könnte man eventuell noch eine weitere IF-Abfrage einbauen:

IF QUERY_STRING enthält 'admin_users.php?mode=edit'
{
redirect(append_sid("login.$phpEx?redirect=QUERY_STRING"));
}
ELSE
{
redirect(append_sid("login.$phpEx?redirect=admin/index.$phpEx&admin=1", true));
}

Oder so ähnlich. Wobei ich leider nicht weiß, ob die vordefinierte Variable QUERY_STRING hierzu überhaupt geeignet ist und wie man sie in das Redirect einbauen könnte.

LG, Wolfgang