【问题标题】:Updating MySQL using SESSION variables via a jquery javascript function通过 jquery javascript 函数使用 SESSION 变量更新 MySQL
【发布时间】:2010-10-13 01:51:11
【问题描述】:

我目前有一个使用 jQuery.js 的 javascript 文件“score.js”,该文件通过链接正确调用。 score.js 中的代码是:

function originalUpdateScore(answer,correct){
if (answer == correct) 
{    
$.post('updateScore.php');  
}
window.location.reload(true);
}

这个函数调用'updateScore.php':

<?php
include("dbstuff.inc");
$con = mysqli_connect($host, $user, $passwd, $dbname)
or die ("Query died: connection");  

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1
    WHERE (user.Username='$_SESSION[logname]')";

mysqli_query($con, $updateScore);

?>

但是数据库没有正确更新。如果我换行:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='$_SESSION[logname]')";

与:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='123pf')";

其中 123pf 是 SESSION 变量包含在调用它正确更新的 javascript 的 php 文件中的值。为什么使用会话变量不起作用?我是否在查询中错误地调用它?

提前致谢。

【问题讨论】:

    标签: php jquery mysql


    【解决方案1】:

    您是否在 updateScore.php 中的任何位置调用 session_start

    如果您还没有开始会话,我认为会话变量不可用。

    【讨论】:

    • 感谢 ypur 的回复....简直不敢相信就这么简单!谢谢。
    【解决方案2】:

    另外,您对 $_SESSION['logname'] 有完全控制权吗?如果没有,有人可以轻松更改他们的登录名以注入 SQL 并损坏/损害您的数据库。例如,如果他们能够将他们的登录名设置为这样,您可能会丢失您的用户表:

    $_SESSION['logname']="'; DROP TABLE user;-- ";
    

    这样玩会让你向作弊者敞开心扉。在这种情况下,任何用户都可以随时访问 updateScore.php 来增加他们的统计数据,因为该脚本既不检查他们的答案,也不检查 JS 构建的表示分数正常的令牌。将这种逻辑保留在前端(javascript)而不在后端(PHP)上进行验证是一个坏主意; javascript 和 AJAX 是非常有用的快捷方式,可以改善用户体验,但不能将它们视为唯一的有效性检查器。

    【讨论】:

    • 感谢您的回复,$_SESSION['logname'] 在其他地方被控制,我将处理我的代码以尝试解决您提到的问题。
    【解决方案3】:

    这可能只是一个转录错误,但您在问题中显示的代码使用了 $_SESSION[logname],它应该是 $_SESSION['logname']。

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2014-03-31
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多