2012-11-21 11 views
6

मुझे पता है कि यह एक गलत सवाल की तरह दिखता है लेकिन कृपया पूरी बात पढ़ें, मैं इससे फंस गया हूं।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); 

    } 

यह एक कारण के लिए तुल्यकालिक रूप में लागू किया गया है, कि इस मुद्दे को यहाँ नहीं है:

मैं अपने पृष्ठों में से एक पर एक AJAX कॉल है, यह एक गतिशील संदेश प्रणाली है। मैंने एसिंक्रोनस पर स्विच करने की कोशिश की और समस्या बनी हुई है।

यह send_message.php फ़ाइल, यह सिर्फ पोस्ट चर पकड़ लेता है और डेटाबेस में उन्हें बचाता है: (

<?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 कॉल चलता है तो सत्र नष्ट हो रहा है! तो session_start() के ठीक बाद एक खाली सरणी प्रिंट करता है।

सत्र मूल पृष्ठ पर ही जीवंत है, और यह पृष्ठ ताज़ा सत्र को जीवंत रखता है। केवल जब मैं AJAX कॉल करने के लिए बटन क्लिक करता हूं, तो सत्र गायब हो जाता है। क्या कोई इस मुद्दे को देख सकता है?

+1

मुझे नहीं लगता कि समस्या दृश्य कोड में है। यहां कुछ भी सत्र चर को नष्ट नहीं करना चाहिए। –

+0

मैं भी उसमें से निश्चित हूं। इसके लिए एक संभावित कारण क्या हो सकता है? पहले मुझसे कभी नहीं हुआ। मैंने जो पोस्ट किया है उसके अलावा वास्तव में कोई कोड शामिल नहीं है। मूल पृष्ठ (जिसे कॉल किया गया है) पृष्ठ की शुरुआत में session_start() को छोड़कर किसी भी सत्र सामग्री का भी उल्लेख नहीं करता है। – jovan

+0

मैंने पहले इस तरह की समस्याएं देखी हैं, और समस्या एक गलत कॉन्फ़िगर किया गया PHP सर्वर था। सत्रों का उपयोग करते समय, मैंने ब्राउजर से संबंधित समस्याओं को भी देखा है। आप बस सुनिश्चित करने के लिए एक अलग ब्राउज़र डाउनलोड और कोशिश कर सकते हैं। यह कहीं और कुछ कोड के साथ एक समस्या भी हो सकती है। मैं यहां जो कुछ देखता हूं उससे वास्तव में नहीं कह सकता हूं। –

उत्तर

0

यहाँ, समाधान है के रूप में अपने होस्टिंग प्रदाता की वह तकनीकी सहायता टीम से मुझे दिया:

सेट suhosin.session.encrypt में/घर = बंद/उपयोगकर्ता नाम/public_html

सेट suPHP_ConfigPath/घर/.htaccess में उपयोगकर्ता नाम/public_html।

और यह है, अब काम करता है। इस समय इन सेटिंग्स की जांच करने का कोई समय नहीं है, लेकिन मुझे उम्मीद है कि यह किसी भी स्थिति में किसी की मदद करेगा।

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। लेकिन जैसा कि आपने कहा था, मैं इसे ठीक नहीं कर सका। क्या मैं उन दोनों पंक्तियों का उपयोग उस फ़ोल्डर के .htaccess में करता हूं जिसमें मेरा ऐप है? दोनों का मतलब है कि 'suhosin.session.encrypt = off' सेट करें और' suPHP_ConfigPath/फ़ोल्डर/... सेट करें '। मैंने पहली सेटिंग की कोशिश की और मुझे सर्वर त्रुटि देता है, शायद सिंटैक्स के साथ कुछ गलत है? – mavili

+0

दूसरी पंक्ति .htaccess में जाती है। पहले के लिए, मैं ईमानदारी से याद नहीं कर सकता लेकिन मुझे विश्वास है कि मैंने इसे अपने समर्पित सर्वर पर डब्ल्यूएचएम के माध्यम से सेट किया है। मुझे यकीन है कि इसे एसएसएच के माध्यम से सेट करना भी संभव है, लेकिन मुझे नहीं पता कि कौन सी फाइल को संपादित करना है। – jovan

0

कृपया फॉर्म शुरू होता है और समाप्त होता है और बहुत महत्वपूर्ण है कृपया जांचें कि क्या आपने वापसी झूठ के साथ बटन दिया है या नहीं। अगर नहीं तो यह रीडायरेक्ट करेगा और आपको कोई सत्र नहीं देगा।