2016-06-25 3 views
-1

Ich versuche, eine einfache Benutzer/Login-Schnittstelle auf meiner Website zu implementieren.Probleme haben, PHP-Sitzung zu "erinnern" Postdaten auf Aktualisierung

Ich kann gut mit einem Standard-HTML-Formular "anmelden" Eingabe für eine Datenbank überprüfen, aber die Benutzername/Passwort-Eingabe ist verloren, wenn ich die Seite nach einer erfolgreichen Anmeldung aktualisieren.

Ich habe einige Nachforschungen angestellt und festgestellt, dass Session-Variablen eine Möglichkeit sind, dies zu umgehen. Also habe ich einen "session_start();" Zeile oben auf jeder relevanten Seite (login.php, index.php). Trotzdem kann ich keine Seite aktualisieren und "eingeloggt" bleiben.

Hier ist der Code:

login.php -

<?php 
session_start(); 
include "db_connect.php"; 
?> 

<html> 
<body> 

<h3>Login form:</h3> 

<form action='index.php' method='POST'> 
    User: 
    <input type="text" name="user"> 
    Pass: 
    <input type="password" name="pass"> 
    <br><br> 
    <input type="submit" value="Login"> 
</form> 

</body> 
</html> 

index.php -

<?php 
session_start(); 

$_SESSION['user'] = $_POST['user']; 
$_SESSION["pass"] = $_POST['pass']; 

$session_user = $_SESSION['user']; 
$session_pass = $_SESSION['pass']; 

?> 

<html> 
<head> 
</head> 

<body> 
</body> 

</html> 


<?php 
include "../db_connect.php"; 


$sql = "SELECT * FROM user WHERE (user = '$session_user' && password = '$session_pass')"; 
$result = $conn->query($sql); 


if ($result->num_rows > 0) { 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     include "index_detail.php"; 
} 
} else { 
    echo "There was an error logging in."; 
} 

?> 

in meinem Code-Logs und zeigt, was ich gerade einmal wollen, aber alle Form-Post Daten (Benutzer/Pass) gehen bei der Aktualisierung verloren. Was mache ich falsch? Ich möchte dieses "eingeloggte" Gefühl wirklich erfassen.

Danke.

+1

Sie versuchen, Sitzungsvariablen per Post festzulegen. Wenn Sie also Ihre Seite aktualisieren, werden die Post-Variablen nicht angezeigt. Also initialisiert es mit leer. Deshalb bleibst du nicht eingeloggt. –

+0

Ah, das sehe ich jetzt. Was kann ich tun, um den Benutzernamen/das Passwort zu erhalten? –

+1

Es gibt mehrere Beispiele für "Remember me" im Internet. Prüfen Sie. In Ihrem Code müssen Sie die Sitzung auf der Anmeldeseite überprüfen. Wenn es Wert hat, laden Sie es einfach in das Eingabe-Tag. –

Antwort

1

Sie versuchen, in diese Datei umzuleiten? Wenn ja, dann falsch.

include "index_detail.php"; 

Nachdem die Daten aus der DB speichern, die in die SESSION-Variable Abrufen und Umleitung auf die gewünschte Seite mit

header("Location:FILE.php"); 

Und in dieser Umleitung Datei müssen Sie die SESSION-Variable zu überprüfen und zu schließen, dass SESSION-Datei in der Kopfzeile auch, wo Sie möchten, dass die angemeldete SESSION verwaltet wird.

Dazu müssen Sie eine neue Sitzungsdatei erstellen, in der kontinuierlich geprüft wird, ob die Sitzung vorhanden oder zerstört ist.

Example“

<?php 
require('db.php'); 
session_start(); 
$check=$_SESSION['login_username']; 

$db = new db(); 
$con= $db->dbconnect(); 
$query="SELECT emailid FROM `admin_users` WHERE emailid='$check' "; 
$session=$db->getrows($query); 

while($row=mysqli_fetch_array($session)) 
{ 
    $login_session=$row['emailid']; 

} 


if(!isset($login_session)) 
{ 
header("Location:LOGINPAGE.php"); 
} 

?> 

Edited: GetRows() ist benutzerdefinierte Funktion, die in db.php erstellt wird, die die DB abfragt und das Rückergebnis nur

+1

Danke. Habe die Funktionalität, die ich wollte. –

+0

Mein Vergnügen danke :) –

0

login.php

<?php 
session_start(); 
include "db_connect.php"; 
?> 

<html> 
<body> 

<h3>Login form:</h3> 

<form action='index.php' method='POST'> 
    User: 
    <input type="text" name="user"> 
    Pass: 
    <input type="password" name="pass"> 
    <br><br> 
    <input name="submit "type="submit" value="Login"> 
</form> 

</body> 
</html> 
.

index.php

<?php 
session_start(); 
if (isset($_POST[submit])) { 
$session_user = $_POST['user']; 
$session_pass = $_POST['pass']; 
} 
if (isset($_SESSION[user]) && isset($_SESSION[pass])) { 
$session_user = $_SESSION['user']; 
$session_pass = $_SESSION['pass']; 
} 
?> 

<html> 
<head> 
</head> 

<body> 
</body> 

</html> 


<?php 
include "../db_connect.php"; 


$sql = "SELECT * FROM user WHERE (user = '$session_user' && password = '$session_pass')"; 
$result = $conn->query($sql); 


if ($result->num_rows > 0) { 
    $_SESSION[user]=$session_user; 
    $_SESSION[pass]=$session_pass; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     include "index_detail.php"; 
} 
} else { 
    echo "There was an error logging in."; 
} 

?> 
0

Hier ist meine Lösung unabhängig von meiner tatsächlichen Implementierung.

Es gibt 3 Dateien für diese Demonstration: form.php, save_to_session.php und access_session_variables.php.

form.php - startet Sitzung nimmt Benutzereingaben Werte Beiträge bilden

<?php session_start();?> 

<html> 

<body> 

<form action='save_to_session.php' method='POST'> 

    text-in: 
    <input type="text" name="text1"> 
    text-in2: 
    <input type="text" name="text2"> 
    <input type="submit" value="Submit"> 

</form> 

</body> 

</html> 

save_to_session.php save_to_session.php - startet Sitzung speichert Gesendete Formularwerte zu Session-Variablen, Umleitungen an access_session_variables.php

<?php session_start(); 

$_SESSION['text-in'] = $_POST['text1']; 
$_SESSION["text-in2"] = $_POST['text2']; 
header('Location: access_session_variables.php') ; 

?> 

access_session_variables.php - jetzt werden die Werte in der Session gespeichert, die Seite zu aktualisieren sie nicht beeinflussen. Diese Datei gibt sie einfach aus

<?php 
session_start(); 

echo $_SESSION['text-in']; 
echo $_SESSION['text-in2']; 

?> 

Danke an alle. Ich habe ein wenig darüber gelernt, wie HTTP "zustandslos" ist und wie ich gleichzeitige Benutzerinteraktionen erzeugen kann, indem ich einmalige Sitzungsinformationen für einzelne Clients speichere.

+0

Es ist nicht notwendig, dass jeder funktionierende Code guten Code ist. Es besteht keine Notwendigkeit, separate Dateien für die Sitzung zu erstellen und Sitzung zu erhalten. Überprüfen Sie die Sitzung in weiteren Seiten der Anmeldung. Wenn es keine Sitzung für den Benutzernamen gibt, leiten Sie sie einfach zur Anmeldeseite um. –