我知道它看起来像一个平庸的问题,但请阅读整个事情,我被这个难住。AJAX调用破坏没有明显原因的会话
我有我的网页上的一个AJAX调用,它是一个动态的邮件系统:
function validateMessage(){
var recipient = document.getElementById("send_to").value;
var subject = document.getElementById("popup_subject").value;
var message = document.getElementById("popup_message").value;
var parameters="message="+message+"&recipient="+recipient+"&subject="+subject;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("error_mess").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("POST","include/send_message.php",false);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xmlhttp.send(parameters);
}
它实现同步是有原因的,这不是这里的问题。我尝试切换到异步,问题依然存在。
这是send_message.php文件,它只是抓住POST变量,并将它们保存到数据库:
<?php
session_start();
include('db.php');
dbConnect();
$message=$_POST['message'];
$subject=$_POST['subject'];
$recipient=$_POST['recipient'];
$result=mysql_query("select * from korisnici where username='$recipient' ") or die(mysql_error());
$row=mysql_fetch_array($result);
$num=mysql_num_rows($result);
if($recipient=="Poruka za..." || $subject=="Naslov..." || $message=="Poruka" || $recipient=="" || $subject=="" || $message=="")
echo "<p style='color:red;'>Morate popuniti sva polja.</p>";
elseif($num==0)
echo "<p style='color:red;'>Korisnik ne postoji.</p>";
else{
$prima=$row['id_user'];
$salje=$_SESSION['id_user'];
mysql_query("insert into poruke (salje, prima, naslov, poruka)
values ('$salje', '$prima', '$subject', '$message') ") or die(mysql_error());
echo "<p style='color:green;'>Poruka uspješno poslata!</p>";
}
?>
然而,当我试图挽救了$ _SESSION [“id_user”]变量(如发件人)我发现一个问题 - 事实证明,每次这个AJAX调用运行时,会话都被销毁!这样做print_r($_SESSION)
之后session_start()
打印一个空数组。
会话在原始页面上保持活动状态,刷新该页面可使会话保持活动状态。只有当我点击按钮进行AJAX呼叫时,会话才会消失。有人可以发现这个问题吗?
我不认为问题是在可见代码中。这里没有什么应该销毁会话变量。 –
我也很确定。那可能是什么原因呢?以前从未发生过我。除了我发布的内容外,其他代码都没有涉及。原始页面(调用是由该页面创建的)甚至没有提及除页面开始处的session_start()之外的任何会话内容。 – jovan
我以前见过这样的问题,而且问题是配置错误的PHP服务器。由于会话使用cookies,我也看到了与浏览器相关的类似问题。您可能想要下载并试用不同的浏览器。它也可能是其他地方的一些代码的问题。根据我在这里看到的,无法真正说出。 –