2012-11-21 17 views
6

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?

+1

Non penso che il problema sia nel codice visibile. Nulla qui dovrebbe distruggere la variabile di sessione. –

+0

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

+0

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. –

risposta

0

Ecco la soluzione, come dato a me da lui tecnica team di supporto del mio fornitore di hosting:

Set suhosin.session.encrypt = Off in/home/nomeutente/public_html

Set suPHP_ConfigPath/home/username/public_html in .htaccess.

E questo è tutto, funziona ora. Non ho tempo per esaminare queste impostazioni a questo punto, ma spero che questo possa aiutare qualcuno nella stessa situazione.

+0

Sto affrontando lo stesso problema. Ma non ho potuto aggiustarlo come hai detto tu. Uso entrambe le righe in .htaccess della cartella in cui ho la mia app? per entrambi intendo 'Set suhosin.session.encrypt = Off' e' Set suPHP_ConfigPath/folder/... '. Ho provato la prima impostazione e mi dà errore del server, probabilmente qualcosa di sbagliato con la sintassi? – mavili

+0

La seconda riga va in .htaccess. Per quanto riguarda il primo, onestamente non riesco a ricordare ma credo di averlo impostato tramite WHM sul mio server dedicato. Sono sicuro che è anche possibile impostarlo tramite SSH, ma non so quale file modificare. – jovan

0

si prega di controllare il modulo inizia e finisce e molto importante si prega di verificare se avete dato pulsante come onclick con return falso.if non poi verrà reindirizzare e non vi dà alcuna sessione lì.

Problemi correlati