首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP、jQuery登录站点

使用PHP、jQuery登录站点
EN

Stack Overflow用户
提问于 2015-10-12 11:45:55
回答 3查看 109关注 0票数 0

我正在创建一个需要登录才能进行任何操作的站点,其流程如下:

  1. 用户输入用户名和密码,然后单击“登录”。
  2. 用户名和密码被发送到JavaScript页面,以便jQuery ajax处理另一个php页面。
  3. PHP脚本酌情处理请求,并将会话变量(user\_logged\_in)设置为"1“或"0”。
  4. 根据返回的内容,该页重新定位到索引页或显示消息。

我的问题是,我使用一个配置文件来确定用户是否使用这个会话变量登录,但是由于某种原因(尽管变量设置为1),页面仍然表示它不是,代码如下:

主登录页面:

代码语言:javascript
复制
<?php
require_once 'login_config.php';
$alert = false;
if (isset($_GET['alert']) && $_GET['alert'] == "1")
{
    $alert=true;
}

//$_SESSION['user_logged_in'] = false;

//if ($_SESSION['user_logged_in'] == true)
//{
//    header("Location: /");
//}
?>
<!DOCTYPE html>
<html>

<head>
    <title>GWSAM &raquo; Login</title>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="styles/login_style.css" />
    <script src="scripts/login/jquery.login.ajax.js"></script>
</head>

<body class="container-fluid">
    <div class="row">
        <div class="col-sm-3"></div>
        <div class="col-sm-6">
            <h1>GWSAM &raquo; Login</h1>
            <?php if ($alert) { ?><p style="text-align: center;" class="alert alert-danger">You must login to access this.</p><?php } ?>
            <table class="table table-condensed table-bordered table-striped">
                <tr>
                    <td>
                        <label for="username">Username</label>
                    </td>
                    <td>
                        <input type="text" name="username" placeholder="Username" class="form-control" id="username" />
                    </td>
                </tr>

                <tr>
                    <td>
                        <label for="password">Password</label>
                    </td>
                    <td>
                        <input type="password" name="password" placeholder="Password" class="form-control" id="password" />
                    </td>
                </tr>

                <tr>
                    <td colspan="2">
                        <input type="hidden" id="http-host" value="<?=$_SERVER['HTTP_HOST']; ?>" />
                        <button id="login" class="form-control btn btn-primary">Login</button>
                    </td>
                </tr>
            </table>
            <div class="row">
                <div class="col-sm-12"id="loading"></div>
            </div>
        </div>
        <div class="col-sm-3"></div>
    </div>
</body>

</html>
<?=var_dump($_SESSION);?>

JavaScript jQuery ajax页面:

代码语言:javascript
复制
$( document ).ready( function ()
{
    $( "#login" ).on( "click", function ()
    {
        $.ajax( {
            url: "/scripts/login/files/login.php?username=" + $( "#username" ).val() + "&password=" + $( "#password" ).val(),
            type: "GET",
            success: function ( R )
            {
                if ( R == "true" )
                {
                    document.write( '<meta http-equiv="refresh" content="0;URL=\''+$("#http-host").val()+'\'" />' );
                    window.location.href = $( "#http-host" ).val();
                    return false;
                    //$( "#loading" ).html( '<meta http-equiv="refresh" content="0; URL=index.php" />' );
                    //window.location.href = "index.php";
                    //return;
                }
                $( "#loading" ).html( R );
            },
            beforeSend: function ()
            {
                $( "#loading" ).html( '<p class="alert alert-info" style="text-align: center;">Logging in, please wait.<br /><img src="http://www.iggadget.com/assets/images/loader-1.gif" alt="spinner.gif" height="30" width="30" /></p>' );
            }
        } )
    } );
} );

Ajax页面:

代码语言:javascript
复制
<?php

require_once '../../../login_config.php';

function Login($username, $password)
{
    global $link;
    while ($result = mysqli_fetch_assoc($link->query("SELECT `username`, `password`, `active` FROM `users` WHERE `username`='{$username}';")))
    {
        if ($result['active'] == "NO")
        {
            print '<p class="alert alert-danger" style="text-align: center;">User\'s account has been deactived, please contact your network admin</p>';
            $_SESSION['user_logged_in'] = "0";
            return false;
        }
        if ($password == $result['password'])
        {
            $_SESSION['user_logged_in'] = "1";
            return true;
        }
    }
    $_SESSION['user_logged_in'] = "0";
    return false;
}

print Login($_REQUEST['username'], $_REQUEST['password']) ? 'true' : '<p class="alert alert-warning" style="text-align: center;">Cannot login, please try again.</p>';

?>

index.php文件的配置页面:

代码语言:javascript
复制
<?php

require_once 'functions/functions.php';
require_once 'functions/database.php';

if (!isset($_SESSION))
    session_start();
$logged_in = isset($_SESSION['user_logged_in']) ? ($_SESSION['user_logged_in'] == "1" ? true : false ) : false;
if (!$logged_in) 
{
    header("Location: login.php");
}
else
{
    //Null action
}

?>

索引页在完成后显示,但它一直将其发送回登录页.

我希望这是足够的信息.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-12 12:01:48

首先,将session_start()移动到所有页面的顶部,或者至少移动所有使用$_SESSION变量的页面。最好的方法是将其添加到包含在所有页面中的include中。

在这个脚本中还有一个行,它在测试之前设置$_SESSION['user_logged_in'] = false;,如果它有一个值,我假设它是在测试中添加的,并且没有被删除。

代码语言:javascript
复制
<?php
session_start();

require_once 'functions/functions.php';
require_once 'functions/database.php';

// this line makes NO SENSE so remove it
//$_SESSION['user_logged_in'] = false;


if ( ! isset($_SESSION['user_logged_in']) || $_SESSION['user_logged_in'] == 0)  {
    header("Location: login.php");
}
else
{
    //Null action
}
?>
票数 1
EN

Stack Overflow用户

发布于 2015-10-12 11:59:47

首先在页面顶部编写session_start();,然后尝试如下:

代码语言:javascript
复制
if(isset($_SESSION['user_logged_in'])&&($_SESSION['user_logged_in']==='1'))
{

//if logged in already
}else{

header("Location: login.php");
}
票数 2
EN

Stack Overflow用户

发布于 2015-10-12 11:51:59

试试这段代码

代码语言:javascript
复制
<?php
session_start();
require_once 'functions/functions.php';
require_once 'functions/database.php';

$_SESSION['user_logged_in'] = false;

$logged_in = isset($_SESSION['user_logged_in']) ? ($_SESSION['user_logged_in'] == "1" ? true : false ) : false;
if (!$logged_in) 
{
    header("Location: login.php");
    exit;
}
else
{
    //Null action
}

?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33080341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档