2010-12-29 13 views
3

Wenn ein Benutzer erfolgreich ein Kennwort und einen Benutzernamen eingibt und Sie die Sitzung festlegen möchten, welche Daten sollte die Sitzung enthalten? Ich bin ziemlich verwirrt darüber, ich habe gelesen, dass es eine zufällig generierte Zeichenfolge sein sollte, kann ich hashed user_id + salt speichern? Ich möchte in der Lage sein zu überprüfen, ob dies tatsächlich der richtige Benutzer:Was in einer Sitzung gespeichert werden soll

Die Form:

<form method="POST" action=""> 
<input type="hidden" name="auth_token" value="<?php echo $form_token; ?>"> 
Username: <input type="text" name="username"> 
Password: <input type="password" name="password"> 
<input type="submit" name="action" value="Login"> 
</form> 

ich so etwas wie die folgenden tun:

if form token in session = form_token var in form 
    if username and password are correct 
    set session hash(user_id + salt) 

Edit: vergessen Um hinzuzufügen, wird es wahrscheinlich auf Shared Hosting sein.

+0

Wählen Sie eine Shared-Hosting-Firma, die Sie Ihre eigene 'tmp'-Verzeichnis und, noch besser, so etwas wie suPHP gibt. – webbiedave

Antwort

7

Sie könnten einfach die Benutzer-ID im Sitzungs-Array speichern. Nur der Sitzungs-ID-Cookie wird an den Browser gesendet, und die "Außenwelt" weiß nicht, was in der Sitzung selbst gespeichert ist. Es ist auch praktisch, etwas zu speichern, um zu zeigen, dass ein Benutzer authentifiziert ist.

Speichern Sie Klartext-Passwörter niemals irgendwo.

$_SESSION["UserAuthenticated"] = true; 
$_SESSION["UserID"] = $userID; 
1

Ihre Sitzung sollte den Benutzernamen des Benutzers oder eine andere interne Benutzer-ID enthalten.

Es besteht keine Notwendigkeit zum Hashing, Salt, usw., da die Sitzungsdaten auf Ihrem Server gespeichert sind, nicht der Computer des Benutzers als Cookie. Es ist auch nicht notwendig, das Passwort in irgendeiner Form zu speichern, da Sie es bereits authentifiziert haben.

1

Einige Leute würden nur die ID speichern. Auch Ihre Idee einer gesalzenen Hash-Version würde ausreichen, erscheint aber wie Overkill. Überprüfen Sie beim nächsten Laden der Seite die ID für die Datenbank.

1

Gibt es einen Grund dafür, einen einfachen Boolean zu vermeiden, um anzuzeigen, dass ein Benutzer authentifiziert wurde? Wenn nicht, dann würde ich vorschlagen:

<?php 

if ($_POST["username"] == 'test' && $_POST["password"] == 'test') { 
    $_SESSION['authenticated'] = true; 
} 

?> 
+2

"authenticated = true" ist in Ordnung, da Sie die Bedingungen steuern, die festgelegt werden. Dies hängt davon ab, wie der Benutzer mit Ihrer Website interagiert. Idealerweise möchten Sie den Benutzer auch bei nachfolgenden Anfragen identifizieren (z. B. Forumsbeiträge verfassen). Daher ist es auch eine gute Idee, die Benutzer-ID zu speichern. – Scuzzy

Verwandte Themen