Tôi biết nó trông giống như một câu hỏi banal nhưng xin vui lòng đọc toàn bộ điều, tôi stumped bởi điều này.Cuộc gọi AJAX phá hủy phiên không có lý do rõ ràng
Tôi có một cuộc gọi AJAX vào một trong các trang của tôi, đó là một hệ thống tin nhắn động:
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);
}
Nó thực hiện như đồng bộ vì một lý do, đó không phải là vấn đề ở đây. Tôi đã thử chuyển sang không đồng bộ và vấn đề vẫn còn.
Đây là tập tin send_message.php, nó chỉ lấy các biến POST và lưu chúng vào cơ sở dữ liệu:
<?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>";
}
?>
Tuy nhiên, khi tôi cố gắng để tiết kiệm $ _SESSION [ 'id_user'] biến (như người gửi) Tôi tìm thấy một vấn đề - nó quay ra phiên đang được tiêu diệt mỗi khi cuộc gọi AJAX này chạy! Vì vậy, hãy thực hiện print_r($_SESSION)
ngay sau session_start()
in một mảng trống.
Phiên đang hoạt động trên trang gốc, và làm mới trang đó giữ phiên còn sống. Chỉ khi tôi nhấp vào nút để thực hiện cuộc gọi AJAX, phiên sẽ biến mất. Ai đó có thể phát hiện vấn đề?
Tôi không nghĩ rằng sự cố nằm trong mã hiển thị. Không có gì ở đây nên phá hủy biến phiên. –
Tôi cũng khá chắc chắn về điều đó. Điều gì có thể là một nguyên nhân có thể cho điều này, sau đó? Chưa bao giờ xảy ra với tôi trước đây. Có thực sự không có mã liên quan khác hơn những gì tôi đã đăng. Trang gốc (mà cuộc gọi được tạo từ) thậm chí không đề cập đến bất kỳ công cụ phiên nào ngoại trừ session_start() ở đầu trang. – jovan
Tôi đã gặp sự cố như thế này trước đây và sự cố là máy chủ PHP được định cấu hình sai. Tôi cũng đã thấy các sự cố tương tự liên quan đến trình duyệt, vì các phiên sử dụng cookie. Bạn có thể muốn tải xuống và dùng thử một trình duyệt khác để đảm bảo. Nó cũng có thể là một vấn đề với một số mã ở một nơi khác. Có thể không thực sự nói từ những gì tôi thấy ở đây. –