ajax检查用户在运行脚本之前登录

时间:2014-05-26 18:00:51

标签: php jquery ajax session

我在我的网站上实施了一个非常基本的投票系统。当用户点击链接时,使用以下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。

任何帮助表示赞赏

感谢 李;

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

例如:

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

注意:完全未经测试。我刚刚复制并粘贴了你的#34;我已经尝试了...&#34;

这有帮助吗?

答案 2 :(得分: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);

我没有尝试过代码,但它应该可以运行。

答案 3 :(得分: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并将用户重定向到请求页面。