2016-06-25 32 views
-1

我試圖在我的網站上實現一個簡單的用戶/登錄界面。無法讓PHP會話「記住」刷新數據

我可以使用標準HTML表單檢查輸入數據庫的「登錄」,但在成功登錄後刷新頁面時,用戶名/密碼輸入會丟失。

我做了一些研究,發現會話變量是解決這個問題的一種方法。所以我添加了一個「session_start();」在每個相關頁面的頂部(login.php,index.php)。不過,我無法刷新頁面並保持「登錄狀態」。

下面的代碼:

的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."; 
} 

?> 

在我的代碼記錄和顯示我想要的只是一次,而是所有形式交數據(用戶/通行證)在刷新時丟失。我究竟做錯了什麼?我真的想要捕捉這種「登錄」的感覺。

謝謝。

+1

您試圖通過發佈設置會話變量。所以當你刷新你的頁面時,它不會得到post變量。所以它初始化爲空白。因此,您不必保持登錄。 –

+0

啊,我現在看到了。我能做些什麼來堅持用戶名/密碼呢? –

+1

在互聯網上有好幾個'記住我'的例子。覈實。在你的代碼中,你必須檢查登錄頁面中的會話。如果它具有值,只需將其加載到輸入標籤中即可。 –

回答

1

您正在嘗試重定向到該文件?如果是,那麼錯誤的方式。

include "index_detail.php"; 

獲取數據從數據庫存儲上設置之後到會話變量和重定向到您想要的頁面使用

header("Location:FILE.php"); 

而且在重定向文件請務必檢查會話變量,包括SESSION文件在標題處也是您希望保存在SESSION中登錄的位置。

爲此,您需要創建一個新的會話文件,它將連續檢查會話是否存在或被銷燬。

實施例」

<?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"); 
} 

?> 

被修改:GetRows的()是在db.php中僅查詢DB,並返回結果創建的自定義功能

+1

謝謝。得到了我想要的功能。 –

+0

我很高興謝謝:) –

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

這是我的解決方案,不可知我的實際實施。

這個演示有3個文件:form.php,save_to_session.php和access_session_variables.php。

form.php的 - 啓動會話,需要用戶輸入,帖子表單值save_to_session.php

<?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 - 啓動會議上,省提交的表單值會話變量,重定向到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 - 現在的值保存到會話,刷新頁面不會影響他們。這個文件只是輸出它們

<?php 
session_start(); 

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

?> 

謝謝大家。我瞭解了一些關於HTTP如何「無狀態」以及如何通過爲各個客戶端存儲唯一會話信息來創建併發用戶交互的一些信息。

+0

沒有必要每個工作代碼都是好代碼。不需要爲設置會話創建單獨的文件並獲得會話。只需在更多登錄頁面中檢查會話。如果沒有會話用戶名只是將其重定向到登錄頁面。 –