So che sembra una domanda banale, ma per favore leggi tutto, sono perplesso da questo.La chiamata AJAX distrugge la sessione senza alcun motivo apparente
devo una chiamata AJAX su una delle mie pagine, si tratta di un sistema di messaggistica dinamica:
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);
}
E 'implementato come sincrono per una ragione, non è questo il problema qui. Ho provato a passare ad asincrono e il problema rimane.
Questo è il file send_message.php, solo afferra le variabili POST e li salva nel database:
<?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>";
}
?>
Tuttavia, quando ho cercato di salvare la variabile $ _SESSION [ 'id_user'] (come il mittente) Ho trovato un problema: si scopre che la sessione viene distrutta ogni volta che viene eseguita questa chiamata AJAX! Così facendo print_r($_SESSION)
subito dopo session_start()
si stampa una matrice vuota.
La sessione è attiva sulla pagina originale stessa e l'aggiornamento di tale pagina mantiene la sessione attiva. Solo quando faccio clic sul pulsante per effettuare la chiamata AJAX, la sessione scompare. Qualcuno può individuare il problema?
Non penso che il problema sia nel codice visibile. Nulla qui dovrebbe distruggere la variabile di sessione. –
Ne sono abbastanza sicuro anche io. Quale potrebbe essere una possibile causa per questo, allora? Non mi è mai successo prima. Non c'è davvero alcun codice coinvolto oltre a quello che ho postato. La pagina originale (di cui è composta la chiamata) non menziona nemmeno alcuna sessione, ad eccezione di session_start() all'inizio della pagina. – jovan
Ho già visto problemi come questo, e il problema era un server PHP mal configurato. Ho anche visto problemi simili con il browser, poiché le sessioni utilizzano i cookie. Potresti voler scaricare e provare un altro browser solo per essere sicuro. Potrebbe anche essere un problema con qualche codice da qualche altra parte. Non posso davvero dire da quello che vedo qui. –