2015-09-08 152 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'替換爲'..'而不是。這不是我的問題,首先變量設置得很好。 –