ajax 在运行脚本之前检查用户是不是登录
Posted
技术标签:
【中文标题】ajax 在运行脚本之前检查用户是不是登录【英文标题】:ajax check user logged in before running scriptajax 在运行脚本之前检查用户是否登录 【发布时间】:2014-07-15 13:08:58 【问题描述】:我在我的网站上实施了一个非常基本的投票系统。当用户单击链接时使用以下 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
但它只是检查页面加载时登录的用户,如果没有显示请登录错误,但我需要它来执行此操作 onclick 的 javascript。
任何帮助表示赞赏
谢谢 李
【问题讨论】:
【参考方案1】:您可以考虑在 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);
【讨论】:
【参考方案2】:为什么不使用 PHP 插入 authenticated
变量,就像使用 vote
和 ID
一样?
例如:
var authenticated = <?php !(isset($_SESSION['sess_user_id']) && $_SESSION['sess_user_id'] != '') ?>
注意:完全未经测试。我刚刚从您的“我尝试过...”中复制并粘贴了 php 代码
这有帮助吗?
【讨论】:
【参考方案3】:添加一个布尔值。每次用户点击投票时,发送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。【参考方案4】:
这最终对我有用。我分享这个只是为了帮助遇到同样问题并最终偏头痛的人。
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 并将用户重定向到请求页面。
【讨论】:
以上是关于ajax 在运行脚本之前检查用户是不是登录的主要内容,如果未能解决你的问题,请参考以下文章
用于检查Active Directory用户上次登录的Powershell脚本