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

Why does this javascript variable not get set into a cookie in php?

本文关键字:php 中的 cookie 设置 javascript 变量 为什么      更新时间:2023-09-26

我有下面的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变量"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

我删掉了一些函数位置代码,使其可读性更强,所以上面的"小部件"比你预期的要长一点,但这就是它所采用的形式。也许这太多了,不能放在饼干里?

有人知道为什么它没有变成饼干吗?请帮忙。

您确定数据在PHP端发布并接收吗?用var_dump($_POST)对此进行检查。

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

尝试

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

饼干还没有凝固吗?

这就是我如何设置和删除cookie而不会在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); 
?>