2013-10-14 2 views
0

У меня есть блок сообщений в заголовке моего сайта. Когда пользователь нажимает «закрыть msg», сообщение должно исчезнуть и не может быть видно во время текущего сеанса пользователя. Поэтому я решил использовать JQuery Ajax:Невозможно изменить переменную сеанса через AJAX

$('#lang-msg .close').on('click', function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     url:"remlmsg.php", 
     type:"POST", 
     data:"id=2,myajaxquery=true ", 
     success:function(html){ 
      console.log(html); 
      $('#lang-msg').fadeOut(300,function() { 
       $(this).remove(); 
      }) 
     } 
    }) 
}) 

И в remlmsg.php У меня есть только код, который определяет новую переменную сеанса:

$_SESSION['langmsg'] = 'hide'; 
    echo $_SESSION['langmsg']; 

В файле header.php я проверяю, если $ _SESSION ['langmsg'] не определено.

if (!isset($_SESSION['langmsg'])) {   
    if ($sLanguage == 'ru') { 
     echo '<script type="text/javascript"> 
       $(function() { 
        showLangMessage("en"); 
       }) 
      </script>'; 
    } 
} 

И он всегда говорит правду! Но когда я печатаю данные запроса в функции ajax, он отображает «hide». Объясните мне, пожалуйста, где я ошибся.

P.S. Протестировано на локальном сервере (последний WAMP)

+0

Вы используете session_start в верхней части файла? –

+0

У меня есть файл header.php – onlydimon

ответ

2

Необходимо сначала указать session_start(). В противном случае вы отредактируете только локальную переменную, которая не хранится нигде.

+0

У меня есть session_start() в header.php - поэтому сеанс всегда объявляется перед ajax-запросом. – onlydimon

+0

Включение session_start() в каждом файле, где я получаю доступ или устанавливаю переменные сеанса, помог мне. – onlydimon

+0

onlydimon: возможно, вы включили его в файл со сценарием, который выполняет вызов ajax, но не на сервере, который обрабатывает запрос. – Pere

0

На самом деле проблема, с которой вы сталкиваетесь, заключается в том, что вызовы ajax будут иметь другой идентификатор сеанса, который связан с заголовками, отправленными/полученными обеими сторонами.

Попробуйте создать некоторый JavaScript с PHP как:

var phpSessionId='<?=session_id()?>'; 

затем в вашем remlmsg.php добавить это на самый верх:

if(isset($_POST['session-id'])) session_id($_POST['session-id']); 
session_start(); 

Наконец в вашем АЯКС использования вызова:

data:"id=2,myajaxquery=true,session-id=" + phpSessionId, 

Это должно решить вашу проблему.

Смежные вопросы