2016-12-10 2 views
-1

Ich möchte einen Benutzer melden, wenn sie auf den Abmelden Link klicken und es funktioniert, aber es gibt ein Problem. Wenn ich auf den Abmeldelink klicke, wird der Benutzer ausgeloggt und geht auf die Kopfseite, aber wenn ich auf die Zurück-Schaltfläche klicke, gehe ich zurück zur vorherigen Seite, ohne mich erneut einzuloggen, und das ist nicht sicher. Wenn der Benutzer sich abmeldet, möchte ich, dass er vollständig ausgeloggt wird. Die einzige Möglichkeit, sich wieder einzuloggen, besteht darin, sich anzumelden. Kann jemand helfen?PHP Benutzer vollständig abmelden

<?php  
include("connect.php"); 

//check if form is submitted 
if ($_SERVER['REQUEST_METHOD'] != 'POST' || 
    ! isset($_POST['signin'])) 
{ 
    // looks like a hack, send to index.php 
    header('Location: index.php'); 
    exit; 
} 

if (empty($_POST["usernam"])) { 
    echo 'fill in username to sign in'; 
} 
if (empty($_POST["pw"])) { 
    echo 'fill in password to sign in'; 
} 

$sql = "SELECT pw FROM users WHERE usernam = ?"; 

$stmt = mysqli_prepare($conn, $sql); 
if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
} 

$stmt->bind_param('s', $_POST['pw']); 
$stmt->execute(); 

if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
} 
// we found a row with that username, 
// now we need to check the password is correct 

// get the password from the row 
$stmt->bind_result($hashed_pwd); 
$stmt->fetch(); 

if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
      header('Location: home.php'); 
} else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
} 

?> 

logout.php

session_start(); 
session_destroy(); 
header('location:index.php'); 

process2.php (Login):

include("connect.php"); 

    //check if form is submitted 
    if ($_SERVER['REQUEST_METHOD'] != 'POST' || 
    ! isset($_POST['signin'])) 
    { 
    // looks like a hack, send to index.php 
    header('Location: index.php'); 
    exit; 
    } 

    if (empty($_POST["usernam"])) { 
    echo 'fill in username to sign in'; 
    } 
    if (empty($_POST["pw"])) { 
    echo 'fill in password to sign in'; 
    } 

    $sql = "SELECT pw FROM users WHERE usernam = ?"; 

    $stmt = mysqli_prepare($conn, $sql); 
    if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
    } 

    $stmt->bind_param('s', $_POST['pw']); 
    $stmt->execute(); 

    if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
    } 
    // we found a row with that username, 
    // now we need to check the password is correct 

    // get the password from the row 
    $stmt->bind_result($hashed_pwd); 
    $stmt->fetch(); 

    if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
      header('Location: home.php'); 
    } else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
    } 
+1

Nun, wie Sie dies wirklich tun, hängt davon ab, wie Sie die angemeldeten Benutzer verfolgen. Zeigen Sie Code aus Ihrem Login-Skript und das sollte uns ein paar Hinweise geben – RiggsFolly

+1

Verwenden Sie eine Sitzung? – Fabio

+0

Ich werde meine Frage aktualisieren – mkd

Antwort

1

Auf der vorherigen Seite (und alle anderen Seiten, die Anmeldung erforderlich) benötigen Sie eine Bedingung hinzufügen überprüft, ob der Benutzer angemeldet ist (dh wenn die Sitzungsvariable für die Benutzeranmeldung eingestellt ist). Das wird der Inhalt nur angezeigt, wenn der Benutzer angemeldet ist

mir diese ein wenig Lassen erarbeiten und Ihnen ein Beispiel helfen.

index.php

session_start(); 
if(isset($_SESSION['username'])) { 
    echo "Welcome to my website! You are logged in."; 
    // do stuff... 
else { 
    header("Location: login.php"); // redirects user to login page if the username session variable is not set 
} 

home.php und alle anderen Seiten sollten auf der Grundlage arbeiten auf dem gleichen Konzept wie oben:

Dann müssen Sie die Session-Variable zum Code-Block in Ihrem Login p hinzufügen Alter, in dem sie überprüft, ob das Passwort korrekt und der Benutzer angemeldet ist:

session_start(); 
// ... (your other code) ... 
if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
    $_SESSION['username'] = $_POST["usernam"]; 
    header('Location: home.php'); 
} else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
} 

Schließlich Ihre logout.php Seite sollte auch nicht gesetzt, daß die Variablen einmal genannt:

session_start(); 
if(isset($_SESSION['username'])) { 
    unset($_SESSION['username']); 
    session_destroy(); 
    echo "succesfully logged out!"; 
    header('refresh:5;location:index.php'); // redirect to index.php in 5 seconds 
} 
else { 
    echo "you are not logged in!"; 
} 

session_destroy() Mit nur ist nicht genug, um als Die Sitzungsvariablen sind nach dem Löschen der Sitzung noch immer gesetzt. Siehe das erste Beispiel von PHP's documentation.

+0

Ich werde meine Frage aktualisieren – mkd

+1

Dies sollte ein Kommentar – Fabio

+1

Ich kann nicht sehen, warum Brians Antwort wird downvoted angesichts der sehr begrenzten Details/Code in der Frage. Diese IMHO, beantwortet etwas die Frage. –

Verwandte Themen