Почему эта переменная javascript не устанавливается в cookie в php? - PullRequest
1 голос
/ 30 мая 2011

У меня есть функция javascript, которая отправляет переменную widgets в php-файл с помощью ajax-вызова. Если я затем отправлю виджеты с переменными обратно в html-документ и выведу его на экран, он правильно отобразится на экране клиента. НО, когда он отправляется в php, я пытаюсь установить его в файл cookie, а файл cookie не устанавливается. Вот функция JavaScript:

function positions(){
    var widgets = '';
    var col = document.getElementById('col');
    for(i = 0; i < col.childNodes.length; i++) {
        var str1 = col.childNodes[i].className;
        if(str1 && str1.match('widget')) widgets+='&c[1]['+i+']='+col.childNodes[i].id;
    }

xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('POST', '/ajaxwidgetpositions.php', true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("widgetpositions="+widgets);
var e = document.getElementById('widget_data');
e.innerHTML += '<p><a>' +widgets + '</a></p>';
xmlhttp.send(null);
return true;
}

А вот и php:

<?php
$widgetpositions = $_POST["widgetpositions"];
setcookie("widgetss", $widgetpositions);
?> 

Что бы это ни стоило, javascript varibale 'widgets' имеет вид:

&c[1][1]=widget_5&c[1][2]=widget_11&c[1][4]=widget_1&c[1][6]=widget_13
&c[2][2]=widget_6&c[2][4]=widget_10&c[2][6]=widget_2&c[2][8]=widget_3
&c[3][3]=widget_7&c[3][5]=widget_12&c[3][7]=widget_8

Я вырезал часть кода позиций функций, чтобы сделать его более читабельным, чтобы вышеприведенные «виджеты» были немного длиннее, чем вы могли ожидать, но это именно та форма, которая требуется. Может быть, это слишком много, чтобы хранить в печенье?

Кто-нибудь знает, почему он не получает cookie? Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 30 мая 2011

так я могу устанавливать и удалять куки без проблем в IE

  //Always use domain and path to control your cookies better.
  //otherwise in IE you can have problem.

  //setcookie
  $domain = "domain.com"; //without subdomain.
  $domain = "/path_of_this_file/"; //without subdomain.

  $widgetpositions = $_POST["widgetpositions"]; 
  setcookie("widgetss", $widgetpositions, time()+3600, $path, $domain, false); 

  //delete cookie
  setcookie("widgetss", '', time()-31536001, $path, $domain, false); 

?>  
0 голосов
/ 30 мая 2011

Вы уверены, что данные опубликованы на стороне PHP?Проверьте это с var_dump($_POST).

Если это так, вы уверены, что ваш сеанс не истек или что-то еще?Поскольку у вас нет срока действия, когда вы устанавливаете свой файл cookie, он будет уничтожен после окончания сеанса.

Попробуйте с

<?php
$widgetpositions = $_POST["widgetpositions"];
setcookie("widgetss", $widgetpositions, time()+60*60);
?>

Не установлен ли файл cookie по-прежнему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...