在运行脚本之前,使用Ajax检查用户是否已登录

3
我在网站上实现了一个非常基本的投票系统。当用户点击链接时,使用以下ajax将其投票添加到数据库并更新投票数+1。
这一切都很正常,但我想在允许用户投票之前检查用户是否已登录。如果没有登录,则显示错误弹出窗口或重定向到登录页面(最终我会显示一个要求他们登录或注册的灯箱弹出窗口)。
<script type="text/javascript">
    $(document).ready(function() {
        $(".voteup a").click(function() {
            var ID = <?php echo $moviedetails['id'] ?>
            //$("#vote").text();
            var rating = <?php echo $vote['vote_up'] ?>
            var queryString = 'id=' + ID + '&vote=' + rating;
            $("#voteup").text (rating + 1);
            $.ajax({
                type: "POST",
                url: "vote_up.php",
                data: queryString,
                cache: false,
                success: function(html) {
                    $("#votethanks").html('Thanks');
                    $("#votethanks").slideDown(200).delay(2000).fadeOut(2000);
                }
            });
        });
    });
</script>

并且vote_up.php

<?php
require_once("header.php");

$data = $_POST['id'];   

$updatevote = "UPDATE `vote` SET `vote_up` = vote_up +1 WHERE `movie_id` = '$data'";
mysqli_query($con, $updatevote);

?>

我已经尝试过了。

if (!(isset($_SESSION['sess_user_id']) && $_SESSION['sess_user_id'] != '')) {
echo "<script>alert('Please login.')</script>";
}
else { //then the javascript

但是它只在页面加载时检查用户是否已登录,如果没有,则显示请登录错误,但我需要它在javascript的onclick事件中执行此操作。

任何帮助都将不胜感激

谢谢 李

4个回答

2

你可以考虑在vote_up.php中使用PHP进行检查,并在ajax中检查响应。类似于这样:

$.ajax({
    type: "POST",
    url: "vote_up.php",
    data: queryString,
    cache: false,
    success: function(result) {
        if (result.error) {
            alert(result.msg);
        } else {
            $("#votethanks").html(result.msg);
            $("#votethanks").slideDown(200).delay(2000).fadeOut(2000);
        }
    }
});

在您的vote_up.php文件中:

<?php

if (!(isset($_SESSION['sess_user_id']) && $_SESSION['sess_user_id'] != '')) {

    // User is not logged in!
    $result = array(
        'error' => true,
        'msg' => 'Please login first!'
    );

} else {

    // write the needed code to save the vote to db here

    $result = array(
        'error' => false,
        'msg' => 'Thanks!'
    );
}

// Return JSON to ajax call
header('Content-type: application/json');
echo json_encode($result);

0

最终这个方法对我有用。我只是分享这个来帮助那些可能遇到同样问题并头疼不已的人。

这是Ajax脚本:

<script type="text/javascript">
function review_likes ( addresscommentid ) 
{ $.ajax( { type    : "POST",
async   : false,
data    : { "txt_sessionid" : addresscommentid }, 
url     : "functions/review_likes.php",
beforeSend: function() {
    // checking if user is logged in with beforeSend
   <?php if (!(isset($_SESSION['signed_in_uid']) && 
$_SESSION['signed_in_uid'] 
   != '')) { ?>        
       $(window.location.href = 'admin/index-signin.php');  
    <?php } ?>
    },
success : function ( sessionid )

{ 
$('#reviewlikes').removeClass('like-action'); 
$('#reviewlikes').load(document.URL +  ' #reviewlikes');       
},
error   : function ( xhr )
{ 
alert( "You are not Logged in" );
}
 });

 return false;

}
</script>

在 review_likes.php 页面的页眉中:
<?php 

$kj_authorizedUsers = "";
$kj_restrictGoTo = "../admin/index.php";
if (!((isset($_SESSION['kj_username'])) && 
(isAuthorized("",$kj_authorizedUsers, 
$_SESSION['kj_username'], $_SESSION['kj_authorized'])))) {   
$kj_qsChar = "?";
$kj_referrer = $_SERVER['PHP_SELF'];
if (strpos($kj_restrictGoTo, "?")) $kj_qsChar = "&";
if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) 
$kj_referrer .= "?" . $_SERVER['QUERY_STRING'];
$kj_restrictGoTo = $kj_restrictGoTo. $kj_qsChar . "accesscheck=" . 
urlencode($MM_referrer);
header("Location: ". $kj_restrictGoTo); 
exit;
} 
?>

上面的代码有点过度,但它有助于获取当前URL并在成功登录后将用户重定向到请求页面。


0
添加一个布尔值。每次用户点击投票时,发送一个ajax调用来检查用户是否已登录。
$(document).ready(function()
{
    $(".voteup a").click(function()
    {
        var the_user_is_logged_in;
        the_user_is_logged_in = checkLoggedIn();
        if the_user_is_logged_in{
            // do ajax call
        }
        else{
            alert('Please log in!')
        }
     }
 }

 function checkLoggedIn(){
    $.get('getsession.php', function (data) {
        return data;
    });

getsession.php 中,你应该编写以下内容。
<?php
session_start();
print json_encode($_SESSION);

我没有尝试过这段代码,但它应该能够工作。


变量 the_user_is_logged_in 总是返回为 UNDEFINED。 - Sachin

0

为什么不使用您的PHP将authenticated变量插入,就像您使用voteID一样?

例如:

var authenticated = <?php !(isset($_SESSION['sess_user_id']) && $_SESSION['sess_user_id'] != '') ?>

注意:完全未经测试。我只是从您的“我已尝试...”中复制并粘贴了PHP代码。

这有帮助吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接