SSL nach Einloggen (https nach Login - http nach Logout)
Verfasst: Di 22. Jun 2004, 10:45
ich wollte gern, dass die Seitenausgabe eines Users nach dem Login nach dem Anmelden generell das https-Protokoll (SSL) verwendet und nach dem Logout wieder zu http wechselt. Da der Content von Contenido per Programmfunktion aus der Datenbank geholt und angezeigt wird, funktioniert leider der Pfad-Expansionsmechanismus des Webservers nicht
Als einfache Lösung habe ich einen kleinen Patch in das Output der Menü-Module eingebaut ...
In der Hauptnavigation anstelle von:
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
dies hier:
-------------------------------------
foreach ($navitems as $key => $data) {
/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
if ($auth->auth["uid"] == "nobody")
{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
else
{
$tpl->set('d', 'HREF', $sess->url('https://localhost/cms/front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
----------------------------------------
und horizontal in der Servicenavigation:
-----------------------------------------
if ($auth->auth["uid"] == "nobody")
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
else
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="https://localhost/cms/front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
-------------------------------------
Die ausserdem eingefügte CSS-Klasse ist unwichtig und dient nur meiner persönlichen Ausgabeformatierung. Im Hauptmenü muss die Codeergänzung an den 3 Stellen gemacht werden, an denen die Ebenen durchsucht werden, in der Servicenavi nur an 1 Stelle. Unabhängig davon, ob man die Standardmodule verwendet, sollte man überall dort so vorgehen, wo interne Links generiert werden.
Statt des absoluten Pfads, den ich auf die Schnelle zum Testen angegeben habe, sollte man den Pfad natürlich aus einer Variablen holen, die in einem include-File steht, damit man nicht jedesmal das Modul ändern muss, wenn sich der Pfad ändert.
Falls man will, dass es sich nach dem Login auch bereits auf der aktuellen Seite auswirkt und nicht erst auf der nächsten aufgerufenen, fehlt noch etwas: die Seite nach dem Login anhand der akt. URI sofort neu laden.
Auf die Umleitung einer Content-Seite bzw. eines Artikels auf einen externen Link hat es keine Auswirkung und darf es auch nicht haben. Zumindest gilt das beim Öffnen eines neuen Fensters. Wie es sich bei der Anzeige innerhalb des Layouts verhält, habe ich noch nicht getestet.
Falls auf der https-Seite ein Formular in einem statisch aufgerufenen Pop-Up Fenster anzeigt, muss man darauf achten, dass dieses ebenfalls die Daten mit SSL überträgt.
Bei mir funktioniert es sehr gut - meine Webseite ist noch in der Entwicklung und läuft zum Testen noch auf localhost.
Falls ich einen Denkfehler gemacht habe oder jemand eine elegantere Lösung kennt, wäre ich für Hinweise dankbar.
Noch etwas: Hat jemand evtl. Erfahrung mit mod_rewrite? Ich hätte gern suchmaschinenfreundliche URL´s. Mit den regular expressions komme ich schon klar, denke ich. Sehr helfen würde mir jedoch ein praktisches Beispiel, wie ich das genau machen muss.
Grüsse von Andreas
Als einfache Lösung habe ich einen kleinen Patch in das Output der Menü-Module eingebaut ...
In der Hauptnavigation anstelle von:
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
dies hier:
-------------------------------------
foreach ($navitems as $key => $data) {
/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);
if ($auth->auth["uid"] == "nobody")
{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
else
{
$tpl->set('d', 'HREF', $sess->url('https://localhost/cms/front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
----------------------------------------
und horizontal in der Servicenavigation:
-----------------------------------------
if ($auth->auth["uid"] == "nobody")
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
else
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="https://localhost/cms/front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
-------------------------------------
Die ausserdem eingefügte CSS-Klasse ist unwichtig und dient nur meiner persönlichen Ausgabeformatierung. Im Hauptmenü muss die Codeergänzung an den 3 Stellen gemacht werden, an denen die Ebenen durchsucht werden, in der Servicenavi nur an 1 Stelle. Unabhängig davon, ob man die Standardmodule verwendet, sollte man überall dort so vorgehen, wo interne Links generiert werden.
Statt des absoluten Pfads, den ich auf die Schnelle zum Testen angegeben habe, sollte man den Pfad natürlich aus einer Variablen holen, die in einem include-File steht, damit man nicht jedesmal das Modul ändern muss, wenn sich der Pfad ändert.
Falls man will, dass es sich nach dem Login auch bereits auf der aktuellen Seite auswirkt und nicht erst auf der nächsten aufgerufenen, fehlt noch etwas: die Seite nach dem Login anhand der akt. URI sofort neu laden.
Auf die Umleitung einer Content-Seite bzw. eines Artikels auf einen externen Link hat es keine Auswirkung und darf es auch nicht haben. Zumindest gilt das beim Öffnen eines neuen Fensters. Wie es sich bei der Anzeige innerhalb des Layouts verhält, habe ich noch nicht getestet.
Falls auf der https-Seite ein Formular in einem statisch aufgerufenen Pop-Up Fenster anzeigt, muss man darauf achten, dass dieses ebenfalls die Daten mit SSL überträgt.
Bei mir funktioniert es sehr gut - meine Webseite ist noch in der Entwicklung und läuft zum Testen noch auf localhost.
Falls ich einen Denkfehler gemacht habe oder jemand eine elegantere Lösung kennt, wäre ich für Hinweise dankbar.
Noch etwas: Hat jemand evtl. Erfahrung mit mod_rewrite? Ich hätte gern suchmaschinenfreundliche URL´s. Mit den regular expressions komme ich schon klar, denke ich. Sehr helfen würde mir jedoch ein praktisches Beispiel, wie ich das genau machen muss.
Grüsse von Andreas