PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Login nur mit Cookies


einsteigi
17.03.2009, 21:40:24
Hallo beisammen,
jetzt mach ich heut schon fast den halben Tag daran rum.

Es geht um folgendes meine Seite ist mehrsprachig. Die Sprachauswahl erfolgt über eine Session, die kann an die URL oder als Cookie gespeichert werden.

Jetzt kommt das große Problem.
Die Seite hat auch ein Login, dieser soll nur mit Cookies gestattet werden.

Hab mir folgedes Kozept ausgedacht:

Sobald jemand den Button des Loginformulars drückt wird eine $_SESSION['loginVersuch'] = true gespeichert.
Dann wird mittels ini_set('session.use_only_cookies', '1'); die Sessionvarablen nur noch in Cookies erlaubt.
Jetzt wird $_SESSION['cokkiesNichtErlaubt'] = true; versucht diese Varable als Cookie zu speichern.
Dann wird mit $_SESSION['loginVersuche'] und $_SESSION['cokkiesNichtErlaubt'] = true geprüft ob Cookie erlaubt wurden, wenn ja wird $_SESSION['login'] = true erzeugt, andernfalls eine Fehlermeldung rausgegeben.
Wenn dann $_SESSION['login'] == true ist wird ein anderes Menu includet, andere Startseite, so stell ich mir das vor. unset wird gemacht, weil $_SESSION['loginVersuche'] nur für login.php zuständig ist.
Was mache ich falsch, bzw. ist mein Denkfehler?

Hoffe ihr könnt mir weiterhelfen.

if ( !empty($_POST['senden_login']) && !empty($_POST['login_gesendet']) && empty($meldung) )
{
$_SESSION['loginVersuch'] = true;
ini_set('session.use_only_cookies', '1');
$_SESSION['cokkiesNichtErlaubt'] = true;
$_SESSION['email'] = $passwortEmailAusDB['email'];
header('Location: '.$urlUnternehmen.'1/'.2.'/Login/');
}
/*echo $_SESSION['email'];
echo $_SESSION['login'];*/
// Prüfen ob Cookies nicht aktzeptiert worden

if ( isset($_SESSION['loginVersuch']) && $_SESSION['loginVersuch'] && !$_SESSION['cokkiesNichtErlaubt'] )
{
//<!-- Sprache müssen aktzeptiert werden. -->
$rowSpracheFromSprachen = readSpracheFromSprachen($variable = 'wurdenNichtAktzeptiert', $sprache = $ermittelteSpracheInjectionfree);
$sprache = $rowSpracheFromSprachen[$ermittelteSpracheInjectionfree];
if ( !empty($sprache) ){ $wurdenNichtAktzeptiert = $sprache; }
$cookiesWurdenNichtAkzeptiert = 'Cookies '.$wurdenNichtAktzeptiert;
}
if ( isset($_SESSION['loginVersuch']) && $_SESSION['loginVersuch'] && $_SESSION['cokkiesNichtErlaubt'])
{
//Cookies akzeptiert
$_SESSION['login'] = true;
echo 'COOKIES ERLAUBT';
echo $_SESSION['cokkiesNichtErlaubt'];
}
unset($_SESSION['loginVersuch']);

if ( !empty($cookiesWurdenNichtAkzeptiert) )
{
echo '
<div style="background-color: #ebf2ff; margin-bottom: 15px; padding: 5px; border: 1px #B2CDFF solid;">
<ul type="square">'.$cookiesWurdenNichtAkzeptiert.'</ul>
</div>';
}
<form action="http://www.url.de/1/2/Login/" method="POST">

<!--HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHh -->
<table cellspacing="0" cellpadding="0" style="padding: 10px;" class="form_HintergrundBorder">

<tr><td align="right">
<label for="email"><strong>E-Mail-Adresse</strong></label>
</td>
<td width="2"></td>
<td><input type="text" name="email_1" size="22" value=""
class="" /></td></tr>

<tr><td align="right">

<label for="password"><strong>Passwort</strong></label>
</td>
<td width="2"></td>
<td><input type="password" name="passwort_1" size="22" value=""
class="" /></td></tr>

<tr><td align="right" colspan="3">
<!--Überprüfen ob Formular zum erstenmal aufgerufen wird -->
Cookies müssen aktzeptiert werden.<br />
<input name="login_gesendet" type="hidden" value="1" />

<input class="button_login" type="submit" name="senden_login" value="Login" style="margin: 10px 0 0 0;" />
</td></tr>
</table>
</form>

urvater
17.03.2009, 21:48:02
Gegenfrage: Was funktioniert denn nicht?

einsteigi
17.03.2009, 21:57:20
Hab mir in Firefox für die Webseite, die Cookies deaktiviert.
Dann geprüft ob die Fehlermeldung erscheint kam nicht. In Seamoney ha ich die Cookies aktzeptiert, bzw. weiß nicht wo ich das unterbinden kann.
In Seamoney wurden sowohl die email, als auch das true von $_SESSION['login'] gespeichert.
Logischerweise in Firefox nicht.

Aber wie mach ich das wenn keine Cookies akzeptiert wurden die Fehlermeldung erscheint?

Muss ja irgendwie prüfen das die Programmierung stimmt, erst dann kann ich ein anderes Menu includen sowie eine andere Startseite.

urvater
17.03.2009, 22:10:58
if ( !empty($_POST['senden_login']) && !empty($_POST['login_gesendet']) && empty($meldung) )
{
$_SESSION['loginVersuch'] = true;
ini_set('session.use_only_cookies', '1');
$_SESSION['cokkiesNichtErlaubt'] = true;
$_SESSION['email'] = $passwortEmailAusDB['email'];
header('Location: '.$urlUnternehmen.'1/'.2.'/Login/');
}
/*echo $_SESSION['email'];
Nach dem Senden werden diese Variablen gesetzt, da der Sendebutton nicht leer ist, das versteckte Feld login_gesendet ebenfalls einen Wert hat und es keine Meldungen gibt.
Die Prüfung findet somit generell nicht nach dem Senden statt.

urvater
17.03.2009, 22:17:11
Oder etwas genauer. Die Prüfungen finden schon statt aber da '$_SESSION['cokkiesNichtErlaubt'] = true;' gesetzt wird sind alle Werte für die If-Anweisung bei Cookies erlaubt gesetzt.

einsteigi
17.03.2009, 23:00:57
@ urvater: erstmal danke für deine Antwort, hast du eine Idee wie die Anweisung dann lauten muss? Ich gerade nicht.

urvater
18.03.2009, 00:43:36
Es ist eigentlich nicht einer Idee sondern eher eine Frage was man machen will. Du selbst willst mit Cookies den Login vornehmen. Ich sehe allerdings nur Session-Variablen.
An keiner Stelle sehe ich, daß du auch nur im Ansatz eine Cookie-Variable setzt.
(SESSSION != COOKIE)

Dann werden Variablen auf true gesetzt. Spätere Fehler müssten allerdings false beinhalten, damit die Prüfung überhaupt stattfindet.

Ich zerflücke mal deine Abfrage, die keine Cookies als ausgabe bringen soll.
//in der If-Anweisung fragst du ob $_SESSION['loginVersuch'] existiert
//als nächstes und steht $_SESSION['loginVersuch'] ohne Bedingung da.... eher überflüssig wenn nicht ein Wert erwartet wird
//!$_SESSION['cokkiesNichtErlaubt'] kann nie nach dem Senden eintreten, da die Variable oben gesetzt wird.
if ( isset($_SESSION['loginVersuch']) && $_SESSION['loginVersuch'] && !$_SESSION['cokkiesNichtErlaubt'] )
{
//<!-- Sprache müssen aktzeptiert werden. -->
$rowSpracheFromSprachen = readSpracheFromSprachen($variable = 'wurdenNichtAktzeptiert', $sprache = $ermittelteSpracheInjectionfree);
$sprache = $rowSpracheFromSprachen[$ermittelteSpracheInjectionfree];
if ( !empty($sprache) ){ $wurdenNichtAktzeptiert = $sprache; }
$cookiesWurdenNichtAkzeptiert = 'Cookies '.$wurdenNichtAktzeptiert;
}
Alles innerhalb des IF's setzt wiederum Variablen, die nichts mit COOKIES zu tun haben und sich auf die Sprache beziehen. Allerdings bleibt mir hier nur Orakeln, da ich die Funktionen nicht kenne.

Auf den Punkt gebracht: Dir fehlt noch einiges an Wissen bzgl. SESSION und COOKIE

einsteigi
18.03.2009, 00:56:40
Danke für deine Antwort. Werde dann mal setcookie verwenden, dachte das das auch mit Sessio geht, nun ja man wird schlauer. Werd den Code dann mal posten.

einsteigi
18.03.2009, 12:49:04
@ urvater, danke für den Hinweis wegen den Cookies!
Musste in der .htaccess wegen mod_rewrite was ändern.
unset war auch falsch, wird jetzt in den anderen Dateien die includet werden gemacht.
Der Hash wird sobald $_COOKIE['login'] = true ist in DB gespeichert. dann wird jedesmal wenn der eingeloogte USER an Link klickt, geschaut, ob der Hash und die Email gleich mit dem COOKIE sind, außerdem wird geprüft ob $_COOKIE['login'] = true ist, ist etwas davon nicht der Fall wird ein Header Location gemacht (Lougout) und die Cookies mit einer negativen Haltbarkeitszeit überschrieben.

<?php
session_start();
$meldung = '';
if ( !empty($_POST['senden_login']) && !empty($_POST['login_gesendet']) && empty($meldung) )
{
$_SESSION['loginVersuch'] = true;
setcookie('login', true, time() + 60*10);
setcookie('email', 'test@test.de', time() + 60*10);
setcookie('hash', 'hash', time() + 60*10);
header('Location: '.$urlUnternehmen.'1/'.2.'/Login/'.SID);
}
/*echo $_SESSION['email'];
echo $_SESSION['login'];*/
// Prüfen ob Cookies nicht aktzeptiert worden

if (!empty($_SESSION['loginVersuch']) && $_SESSION['loginVersuch'])
{
if ( !isset($_COOKIE['email']) && !isset($_COOKIE['hash']) && !isset($_COOKIE['login']) )
{
$cookiesWurdenNichtAkzeptiert = 'Cookies wurden nicht aktzeptiert';
}
if ( !empty($_COOKIE['email']) && !empty($_COOKIE['hash']) && $_COOKIE['login'] )
{
//Cookies akzeptiert
echo 'COOKIES ERLAUBT';
}
}


echo 'loginVersuch '.$_SESSION['loginVersuch'].'<br />';
echo 'email '.$_COOKIE['email'].'<br />';
echo 'hash '.$_COOKIE['hash'].'<br />';
echo 'login '.$_COOKIE['login'].'<br />';
echo 'SID :'.SID.'<br />';
echo 'PHPSESSID: '.substr(SID, - 32);
?>