无法让PHP会话进入"记得"在刷新时发布数据

时间:2016-06-25 23:02:42

标签: php sql session authentication login

我试图在我的网站上实现简单的用户/登录界面。

我可以登录'只需使用标准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.";
}

?>  

我的代码登录并显示我想要的内容,但所有表单发布数据(用户/密码)在刷新时都会丢失。我究竟做错了什么?我真的想抓住这个&#34;登录&#34;感觉。

感谢。

3 个答案:

答案 0 :(得分:1)

您正在尝试重定向到该文件?如果是,那就错了。

 include "index_detail.php";

将数据集从DB存储中提取到SESSION变量中并使用

重定向到所需的页面
header("Location:FILE.php"); 

在该重定向文件中,请确保检查SESSION变量,并将SESSION文件也包含在标题中,以便保留Logged in 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中创建,仅查询数据库并返回结果。

答案 1 :(得分: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.";
}

?>

答案 2 :(得分: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是如何“无状态”的,以及如何通过为各个客户端存储唯一的会话信息来创建并发用户交互。