2015-09-08 109 views
0

我真的想在发送会话时使用我的jquery ajax post调用,这里是我的代码的简化示例。jquery post ajax调用会话不工作

文件FOM该请求被发送:

<?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();} 
?> 

什么,现在我得到的是,贴变量每个I刷新时间而改变页面,但$ sess_token总是给我相同的值:0589dd536fd043ff3865f8223fef3030

我真的不明白这个奇怪的行为,有人可以帮助我吗?

+3

你在你的第一个代码中混合使用PHP和jQuery吗? o.0 session_start(); $ .post(ContactUrl,{req:“contact_sub”,to ~~ – hanshenrik

+0

no ofourse当然不是我刚给了一个没有包装它的代码的例子 –

+2

@AlbertKuzmin请在''之间包装PHP代码。 –

回答

3

你这里的问题是,你使用在JS脚本一个PHP变量var而不用包木窗和呼应吧..这里是你的代码修改:

你也想用JS .到contatenate。这也来自PHP。

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

更新

我今天回来这个答案一次。这是我做过什么:

FILEindex.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> 

FILEmyOtherScript.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文件时都会刷新。

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

+0

对不起,混淆我实际上回声的JS脚本php,为什么它的写法更新我的代码在问题中 - 我的问题是与sessins –

+0

@AlbertKuzmin通过采取和复制他的答案并用它替换您的示例,它会影响问题的整个上下文及其答案。 -1 –

+0

我没有用我的答案代替我的代码 - 就像我说的,因为我在发布代码时犯了一个错误,因为在我的真实代码中,我从服务器端回显了js脚本,如下所示:$ script ='';这就是为什么我把'var'替换为'..'而不是。这不是我的问题,首先变量设置得很好。 –