【问题标题】:Session Confliction Error会话冲突错误
【发布时间】:2013-10-11 04:16:41
【问题描述】:

我正在创建一个网站,人们可以在该网站上通过对发布进行评级来发表他们的意见,并将其存储到由 PHP 驱动的 MySQL 数据库中。

我有一个特定版本的反馈表,它(在这个例子中说)的 ID 为 35。当我向用户发送另一个 ID 为 36 并且用户同时打开两个窗口时,PHP处理代码存储来自 ID 35 但 ID 为 36 的响应。当数据库的 'reaction_reacted' 值为 '1' 时,页面将重定向到上一页。

有没有办法解决这个问题?

这是我的代码示例。 $promo_id、reaction_id 和 username 是在提交时从上一页传递给它的。

session_start(); 

include 'connect.php'; 
mysql_connect($host,$db_user,$db_password);
mysql_select_db($database);     

$promo_id = $_SESSION['promo_id'];
$reaction_id = $_SESSION[reaction_id];
$username = $_SESSION['username'];

if(isset($_SESSION['username']))
{

// Check to see if Receipt and DJID values are entered

$queryb = "select reaction_ID from reactiondata where reaction_ID='$reaction_id' AND reaction_username='$username' AND reaction_promoID='$promo_id' and reaction_reacted='1'";
$result2 = mysql_query($queryb) or die(mysql_error());

while($row = mysql_fetch_array($result2)){
header('Location: ' . $_SERVER['HTTP_REFERER']);
// session_destroy();
// exit;
}

if ($reaction_id && $promo_id != null) 
{

$p4support = $_POST['DJsupport'];
$p4favouritemix = $_POST['FavMix'];
$p4score = $_POST['score'];
$p4comment = $_POST['DJcomment'];

$query = "UPDATE reactiondata SET reaction_username='$username', reaction_promoID='$promo_id', reaction_support='$p4support', reaction_favouritemix='$p4favouritemix', reaction_score='$p4score', reaction_comment='".mysql_real_escape_string($p4comment)."', reaction_reacted='1' WHERE reaction_ID='$reaction_id'";
mysql_query($query) or die('Error in MySQL query. Here is the error message: '.mysql_error());

$query7 = "UPDATE reactiondata SET reaction_time=NOW() WHERE reaction_ID='$reaction_id'";
mysql_query($query7) or die('Error in MySQL query. Here is the error message: '.mysql_error());
}

谢谢

CP

P.S 我知道我正在使用已弃用的 mysql_query 方法,我只是希望页面在开始防止 SQL 注入攻击之前正常运行。

【问题讨论】:

    标签: php mysql sql session conflict


    【解决方案1】:

    最简单的解决方案(其中之一)是将reaction_id 作为隐藏表单字段添加到表单中,而不是使用会话。这样,在发布表单时,反应总是与正确的 ID 相关联。

    您不应为此使用会话,因为会话将跨越浏览器中所有打开的窗口和选项卡,因此不适合维护特定选项卡的状态。

    【讨论】:

    • 啊,不可能,谢谢你,伙计,这似乎太明显了,我简直不敢相信!非常感谢!
    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多