在尝试使用我的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
我真的不明白这种奇怪的行为,有人可以帮我解决这个问题吗?
答案 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
文件时都会刷新。
总之,您的问题不在您分享的代码中。