Php 使用$\u会话检查用户登录

Php 使用$\u会话检查用户登录,php,session,Php,Session,下面是以下脚本,第一个是checklogin.php。这将匹配存储在MYSQL数据库中的用户名和密码。一旦检查了这些信息,他们将通过使用重定向功能被发送到他们的个人页面 底部的php脚本是user1的登录页。我想在那里的东西,将确认这个人已正确登录,并没有权利查看此页面 目前,当我以user1身份登录时,我看到了3.php页面,也就是说,我没有正确登录。我知道我需要设置一个会话,如: $\会话[已登录']='y'; 我认为这应该放在密码与数据库中存储的密码进行比较的地方。目前,我无法输入我的登录

下面是以下脚本,第一个是checklogin.php。这将匹配存储在MYSQL数据库中的用户名和密码。一旦检查了这些信息,他们将通过使用重定向功能被发送到他们的个人页面

底部的php脚本是user1的登录页。我想在那里的东西,将确认这个人已正确登录,并没有权利查看此页面

目前,当我以user1身份登录时,我看到了3.php页面,也就是说,我没有正确登录。我知道我需要设置一个会话,如: $\会话[已登录']='y'; 我认为这应该放在密码与数据库中存储的密码进行比较的地方。目前,我无法输入我的登录详细信息,也无法在最后指向正确的文件。任何帮助都将不胜感激

<?php

session_start();
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

mysql_connect("localhost", "root", "root") or die(mysql_error()); //Connect to server
mysql_select_db("first_db") or die("Cannot connect to database"); //Connect to database
$query = mysql_query("SELECT * from users WHERE username='$username'"); //Query the users table if there are matching rows equal to $username
$exists = mysql_num_rows($query); //Checks if username exists
$table_users = "";
$table_password = "";

if ($exists > 0) {
    //IF there are no returning rows or no existing username

    //$_SESSION['logged in'] == 'y';

    while ($row = mysql_fetch_assoc($query)) {
        //display all rows from query
        $table_users = $row['username']; // the first username row is passed on to $table_users, and so on until the query is finished
        $table_password = $row['password']; // the first password row is passed on to $table_users, and so on until the query is finished
        $table_id = $row['id'];
        $page_id = $row['page'];
    }

    if (($username == $table_users) && ($password == $table_password)) {
        // checks if there are any matching fields

        if ($password == $table_password) {
            $_SESSION['user'] = $username; //set the username in a session. This serves as a global variable
            $_SESSION['logged_in'] = 'y';
            //echo $table_id;
            //echo $page_id;

            redirect($page_id); //take the user to the page specified in the users table
        } else {
            echo "Login Failed";
        }
    } else {
        print '<script>alert("1. Incorrect Password!");</script>'; //Prompts the user
        print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
    }
} else {
    print '<script>alert("Incorrect Username!");</script>'; //Prompts the user
    print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
}

function redirect($page_id)
{
    /* Redirect browser */
    header('Location: '.$page_id);
    /* Make sure that code below does not get executed when we redirect.         */
    exit;
}

?>

和登录页

<?php

session_start();
//user logged in??

if ($_session['logged in'] != 'Y') {
    //No- jump to log in page.
    header("location: 3.php");
    exit();
}
else
{
    echo 'this works';
}

?>

您将会话定义为:

$_SESSION['logged in'] == 'y';
应该是:

$_SESSION['logged in'] = 'y';
if ($_SESSION['logged in'] != 'y') {
然而,你检查如下:

if ($_session['logged in'] != 'Y') {
应该是:

$_SESSION['logged in'] = 'y';
if ($_SESSION['logged in'] != 'y') {
您正在检查它是否是大写的Y,而它是小写的Y。所以它永远不会成功

另外,
$\u SESSION
是一个会话,这意味着:

超全局变量-超全局变量是内置变量,总是 适用于所有范围


变量是区分大小写的。

如果($\u session['logged']!='Y')
这是您的问题。想想“字母箱”。思考超全局并进行比较;-)我瞎了吗?您在哪里设置$_会话['logged in']?如果不通过mysql传递用户输入密码,为什么要对其进行转义?出于隐私原因,您至少也应该在db中散列您的密码:)请。它们不再得到维护,而是在使用。学习代替,并考虑使用。它应该是……OP做了什么不正确的事?这里缺少一条重要信息。
$\u会话['logged in']='y'没有定义
$\u会话['logged in']
,而是在进行比较。@Sean抱歉。我只是注意到OP的代码有很多问题。我错过了一对。@Fred ii-谢谢你的评论。我把它加到了答案上。