【问题标题】:Session variables not being transported会话变量未传输
【发布时间】:2016-08-09 05:42:41
【问题描述】:

我正在学习 PHP(作为一种爱好),我想构建一个简单的登录页面来练习。

我有一个表格:

<form action="phpAction/checklogin.php" method="POST">
<p>Username:</p>
<input type="text" name="username">
<p>Password:</p>
<input type="password" name="password">
<br><br>
<input type="submit" value="Submit">
<br><br>
<a href="signup.php">You don't have an account yet?</a>
</form>

发布到 php 代码:

<?php

// Starts a MySQLi connection to the database
include "../includes/mysqliConn.php";

// Starts a session to keep the user logged in
session_start();

// Posts the username and password from the form and stores it into a session variable

if (isset($_POST["username"]) && isset($_POST["password"])) {
  $_SESSION["username"] = $_POST["username"];
  $_SESSION["password"] = $_POST["password"];
} else {
    die("You cannot be here!");
}
// Checks login
$checklogin = 'SELECT * FROM users WHERE username = $_SESSION["username"] AND password = $_SESSION["password"]';
$result = $conn->query($checklogin);
                if ($result->num_rows = 0){
                    echo "<script language='javascript' type='text/javascript'>alert('Login and/or password wrong!');window.location.href='login.php';</script>";
                    die();
                } else {
                    // Variable to other pages see that the user is logged in
                    $_SESSION["islogged"] = "true";
                    // Redirects to the homepage
                    header("Location: ../index.php");
                }

?>

它将会话变量“islogged”设置为true,以便其他页面可以显示用户信息。

在网站的标题中我有这个:

<?php

      if ($_SESSION["islogged"] == "true") {
          echo "<a href='#'>Panel</a>";
          echo "<a href='#'>Logout</a>";
      } else {
         echo "<a href='login.php'>Login</a>";
         echo "<a href='#'> / </a>";
         echo "<a href='signup.php'>Sign Up</a>"; 
      }

?>

当变量“islogged”设置为“true”时,页面应该显示链接 Panel 和 Logout,而不是 Login 和 Signup 链接。但我一直在登录和注册。 似乎会话变量没有被“传输”。

感谢任何形式的帮助。

PS:抱歉英语不好:P

谢谢

【问题讨论】:

  • 1.您不能将任何变量 ($_SESSION["username"]) 放在单引号内,它必须是双引号。 2.你应该看看SQL注入预防和PDO/Mysqli准备语句
  • 我使用单引号,因为如果我放双引号,我会收到 500 错误
  • 在其他页面中检查$_SESSION["islogged"]之前是否调用session_start
  • @João yah = 'SELECT * FROM users WHERE username = $_SESSION["username"] 单引号不起作用...使用双引号。
  • 您是否在 if 语句之前回显了 S_SESSION["username"] 只是检查它的值并让我们知道。

标签: php mysql session variables authentication


【解决方案1】:

要使用$_SESSION 变量,请先运行session_start()。您标记为“在网站标题中”的示例您没有首先运行session_start()

http://php.net/manual/en/function.session-start.php

session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话

【讨论】:

    【解决方案2】:

    据我所知,除数字之外的任何内容都必须包含在 ' ' 中。试试这个

     $checklogin = "SELECT * FROM users WHERE username ='".$_SESSION['username']."' AND password ='".$_SESSION['password']."'";
    

    我希望这行得通。

    【讨论】:

    • @João 欢迎您!如果它解决了您的问题,请不要忘记接受答案。
    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2013-05-01
    • 2014-02-07
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多