jquery发布ajax调用会话无法正常工作

时间:2015-09-08 00:45:41

标签: php jquery ajax session

在尝试使用我的jquery ajax post调用发送会话时,我真的迷失在这里,这是我的代码的简化示例。

发送请求的文件:

<?php
    session_start();
    $token = md5(rand(1000,9999));
    $_SESSION['contactToken'] = $token; 
?>

<script type="text/javascript">
    $.post(ContactUrl,{req:"contact_sub",tok:"<?php echo $token; ?>"},function(contactAns){
        alert(contactAns); return false;
    });
</script>

文件请求发送至:

<?php
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="url"){
    if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ){

        session_start();
        $token = $_POST['tok'];
        $sess_token = $_SESSION['contactToken'];

        if($token == $sess_token){
            echo "sessions match"; exit();
        }
        else{
            echo "sessions does not match"; exit();
        }
    }
    else{echo "error"; exit();}
}
else{echo "error"; exit();}
?>

起初会话没有得到认可,我做了所有检查 - 确保它首先设置确保它已发布,在两个页面上宣布会话开始,如果我尝试在第二个文件:

<?php
session_start();
$token = $_POST['tok'];
$sess_token = $_SESSION['contactToken'];

print_r($_SESSION['contactToken']); exit();
?>

我会得到一个空警报。然后我将会话开始转移到第二页上的脚本顶部并开始获取会话的值:

<?php
session_start();
$sess_token = $_SESSION['contactToken'];

if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="url"){
    if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ){

        $token = $_POST['tok'];
        echo "$token, $sess_token"; exit();

    }
    else{echo "error"; exit();}
}
else{echo "error"; exit();}
?>

我现在得到的是每次刷新页面时发布的变量都会更改,但$ sess_token总是给我相同的值:0589dd536fd043ff3865f8223fef3030

我真的不明白这种奇怪的行为,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

你的问题是你在JS脚本中使用PHP var而没有包装和回应它。这是你修改的代码:

您还尝试在JS中与.进行联系。这也来自PHP。

<script type="text/javascript">
    $.post(ContactUrl, {
        req: "contact_sub",
        tok: "<?php echo $token; ?>"
    }, function(contactAns) {
        alert(contactAns); 
        return false;
    });
</script>

更新

我今天再次回到这个答案。这就是我所做的:

文件index.php

<?php
    session_start();
    $token = md5(rand(1000,9999));
    $_SESSION["contactToken"] = $token; 
?>

<script type="text/javascript">
    $.post("myOtherScript.php", {
      req:"contact_sub",
      tok:"<?php echo $token; ?>"
    }, function(contactAns){
      alert(contactAns);
      return false;
    });
</script>

文件myOtherScript.php

<?php
   session_start();
   $sess_token = $_SESSION["contactToken"];

   if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && ($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest")){

      $token = $_POST["tok"];
      echo $token ." - ". $sess_token;

   } else {
      echo "Not an AJAX request";
   }
?>

我得到的是一个令牌等于另一个令牌的警报,每次重新加载index.php文件时都会刷新。

总之,您的问题不在您分享的代码中。