我知道它看起來像一個平庸的問題,但請閱讀整個事情,我被這個難住。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,我也看到了與瀏覽器相關的類似問題。您可能想要下載並試用不同的瀏覽器。它也可能是其他地方的一些代碼的問題。根據我在這裏看到的,無法真正說出。 –