想知道是否有人可以提供协助..
我正在向我的网站添加一些jquery,但我想根据用户是否登录来限制某些操作。我不确定如何使用Jquery ..
检测会话变量我最初的想法是使用Jquery Ajax调用我的checkUser cfc,然后检查从这里返回的行数,并从那里开始工作。但我不确定如何解决这个问题。目前,我的代码看起来像这样
$.getJSON('http://localhost:8500/mxRestore/model/mdl_user.cfc?method=getUserData&returnFormat=json&queryformat=column', {}, function(data){
var isLoggedIn = data.ROWCOUNT;
})
if (loggedIn > 0) {
// Do this
}
else {
alert('You are not logged in');
}
}
但是,我收到一条错误消息,指出isLoggedIn变量未定义。想知道如何最好地处理这个问题。
由于
答案 0 :(得分:1)
您正在回调中定义变量,但在该范围之外使用它。您还需要将执行操作的代码移动到回调中。
$.getJSON('http://localhost:8500/mxRestore/model/mdl_user.cfc?method=getUserData&returnFormat=json&queryformat=column', {}, function(data){
if (data.ROWCOUNT > 0) {
// do this
}
else {
alert('You are not logged in');
}
});
但是,通常情况下,我要做的是启用或禁用服务器端操作 - 即,不为不可用的操作提供代码。具有调试器的人总是可以打败您的客户端检查,因此您需要非常小心地根据服务器调用的结果来强制执行安全性并始终检查服务器。
答案 1 :(得分:1)
isLoggedIn
变量超出了您使用它的范围,它仅在getJSON回调中可用,请考虑在那里工作:
$.getJSON('...', {}, function(data){
var isLoggedIn = data.ROWCOUNT > 0; // isLoggedIn is now boolean
if (isLoggedIn) {
// Do something
} else {
alert('You are not logged in');
}
});
我还建议你从服务器返回一个布尔值,而不是暴露行数。
有关功能范围的更多信息:
答案 2 :(得分:1)
由于你已经有了一些好的答案,让我在讨论中提出一个公平的警告:
1)在将页面发送到客户端之前操纵用户看到的内容会更有意义,从而消除了方法的大量复杂性。
2)不要依赖客户端脚本作为保护未登录用户的功能的唯一方法。可以通过简单地关闭脚本或编辑内容来规避这样的客户端安全代码。页面注释掉安全检查。
3)如果您绝对必须这样做,请让服务器在启动操作时重新检查凭据/登录状态,即使客户端代码已经执行了..
4)我在第3项中建议的冗余检查是使用服务器端脚本而不是客户端JS / JQUERY执行此操作的另一个好理由。
答案 3 :(得分:0)
有几个问题:
isLoggedIn
,但引用loggedIn
。isLoggedIn
,但在函数你可以解决这个问题:
var loggedIn = null;
$.getJSON('http://localhost:8500/mxRestore/model/mdl_user.cfc?method=getUserData&returnFormat=json&queryformat=column', {}, function(data){
loggedIn = (data.ROWCOUNT > 0);
});
因此,您可以在代码中的其他位置进行测试,如下所示:
if(loggedIn){
// Do something
} else if (loggedIn === false) {
alert('You are not logged in');
} else {
// Callback hasn't been run yet
}
如果您只需要运行一次,只需在if
方法的回调中添加整个else
语句(减去$.getJSON
)。
答案 4 :(得分:0)
代码存在两个问题。
您注意到的第一个变量是,该变量仅存在于您为处理回调而创建的匿名函数的范围内。
另一个问题是在设置变量之前执行使用变量的代码。
发送对服务器的请求,然后回调函数等待响应,但发送请求的代码不等待响应,因此它将使用变量继续代码。
通过将使用该变量的代码移动到回调函数中,可以解决这两个问题。
或者,将使用该变量的代码放在单独的函数中,并从回调函数中调用该函数:
$.getJSON(
'http://localhost:8500/mxRestore/model/mdl_user.cfc?method=getUserData&returnFormat=json&queryformat=column',
{},
function(data) {
handleCallBack(data.ROWCOUNT > 0);
}
);
function handleCallBack(isLoggedIn) {
if (isLoggedIn) {
// Do this
} else {
alert('You are not logged in');
}
}