Wiem, że wygląda to banalnie, ale proszę przeczytaj całość, jestem tym zaskoczony.Połączenie AJAX niszczy sesję bez wyraźnego powodu.
Mam wywołanie AJAX na jednej z moich stron, to dynamiczny system wiadomości:
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);
}
Jest zaimplementowany jako synchroniczne z jakiegoś powodu, że nie jest to problem tutaj. Próbowałem przejść na asynchroniczny i problem pozostaje.
ten plik send_message.php, po prostu chwyta zmienne POST i zapisuje je do bazy danych:
<?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>";
}
?>
Jednak, kiedy próbuje zapisać zmienną $ _SESSION [ „id_user”] (jak nadawca) Znalazłem problem - okazuje się, że sesja jest niszczona za każdym razem, gdy uruchomione jest wywołanie AJAX! Czynienie print_r($_SESSION)
zaraz po session_start()
drukuje pustą tablicę.
Sesja jest żywa na oryginalnej stronie, a odświeżenie tej strony utrzymuje sesję przy życiu. Dopiero po kliknięciu przycisku, aby wykonać wywołanie AJAX, sesja znika. Czy ktoś może wykryć problem?
Nie sądzę, że problem jest widoczny w widocznym kodzie. Nic tutaj nie powinno niszczyć zmiennej sesji. –
Jestem tego także pewien. Jaka może być tego przyczyna? Nigdy wcześniej mi się nie zdarzyło. Naprawdę nie ma kodu związanego z tym, co napisałem. Oryginalna strona (z której wywoływane jest wywołanie) nie wspomina o żadnych elementach sesji z wyjątkiem session_start() na początku strony. – jovan
Widziałem już takie problemy, a problemem był źle skonfigurowany serwer PHP. Widziałem również podobne problemy związane z przeglądarką, ponieważ sesje używają plików cookie. Możesz pobrać i wypróbować inną przeglądarkę tylko po to, by mieć pewność. Może to być również problem z jakimś kodem gdzieś indziej. Naprawdę nie mogę powiedzieć z tego, co tu widzę. –