【问题标题】:Why does this javascript variable not get set into a cookie in php?为什么这个 javascript 变量没有被设置到 php 中的 cookie 中?
【发布时间】:2011-05-30 12:10:39
【问题描述】:

我有下面的 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 '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 中?

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

【问题讨论】:

  • 请注意...对于您的 cookie 而言,数据量并不多。 Firefox 和 Opera 过去最高可以达到 4090 左右,而 IE 则更高。不确定这是否是有效信息,但如果 cookie 大于 8190 字节并且根本不会提供请求,Apache 会出错。

标签: php javascript cookies


【解决方案1】:

您确定数据是在 PHP 端发布的吗?用var_dump($_POST)检查这个。

如果是,你确定你的会话没有过期还是什么?由于您在设置 cookie 时没有过期时间,因此会话结束时它将被擦除。

试试

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

cookie 还没有设置吗?

【讨论】:

  • 我将 var_dump($_POST) 添加到 php 文件中,但刷新页面时没有任何反应,这是否意味着 PHP 端没有接收到数据?
  • 添加,cookie不设置。
  • 如果您将此添加到接收帖子的脚本中,那么是的,您的帖子数据不会被发送到服务器。您可以使用 JQuery 轻松发送数据:$.post("foobar.php", { firstname: "Foo", lastname: "Bar" } );
  • 好的。所以我必须添加 $.post("ajaxwidgetpositions.php", { widgetpositions: widgets } );并删除我的javascript代码的for语句和return true部分之间的所有内容?谢谢
  • 在不知道数据结构的情况下可能没问题。但是,您必须将 JQuery 库包含到您的文件中,并且对数据进行 JSON 编码可能是明智之举。谷歌“JQuery post ajax json ecode”或类似的,你会找到你需要的。
【解决方案2】:

这就是我在 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); 

?>  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多