为什么这个javascript变量没有被设置成php中的cookie?

时间:2011-05-30 12:10:39

标签: php javascript cookies

我有下面的javascript函数,通过ajax调用将变量'widgets'发送到php文件。如果我然后将变量小部件发送回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'小部件'具有以下形式:

&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中太多了?

有谁知道为什么它没有设置为cookie?请帮忙。

2 个答案:

答案 0 :(得分:0)

您确定数据是在PHP端发布的吗?请使用var_dump($_POST)

进行检查

如果是,您确定您的会话没有过期吗?由于您在设置cookie时没有到期时间,因此会话终止时将被擦除。

尝试

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

Cookie是否仍未设置?

答案 1 :(得分:0)

这就是我如何在IE中设置和删除cookie而没有问题     

  //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); 

?>