【问题标题】:Using session_start() with AJAX without warnings [duplicate]将 session_start() 与 AJAX 一起使用而不会发出警告 [重复]
【发布时间】:2013-12-28 18:10:06
【问题描述】:

我正在使用 AJAX 调用 php 脚本将“+1”添加到某个产品并将其保存在购物车中。一切似乎都正常,但我有以下警告:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

我的代码如下:

<?php
session_start();
if (!isset($_SESSION["product1"])) {
    $_SESSION["product1"] = 0;
}
if (!isset($_SESSION["product2"])) {
    $_SESSION["product2"] = 0;
}
var_dump($_SESSION);
session_write_close();
?>

<!doctype html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="js/ajax.js"></script>
</head>
<body>
<p id="add1">Prod 1: <?php echo $_SESSION["product1"]; ?></p>
<p id="add2">Prod 2: <?php echo $_SESSION["product2"]; ?></p>
<li><a href="#" onclick=ajax("add1")> Add product1 </a><br></li>
<li><a href="#" onclick=ajax("add2")> Add product2 </a><br></li>
</body>
</html>

ajax.js 是:

function ajax(str) {
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }

    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById(str).innerHTML = xmlhttp.responseText;
        }
    };
    xmlhttp.open("GET", str + ".php", true);
    xmlhttp.send();
}

而且add1.php和add2.php类似:

<?php
session_start();
$_SESSION["product1"] += 1;
$response = 'Vinho 1: ' . $_SESSION["product1"];
echo $response;
session_write_close();
?>

我做错了什么?我只想继续会话。我试图摆脱 session_write_close() 无处不在,但我仍然有同样的警告。使用 @session_start() 可以解决问题,但我认为它只是隐藏了警告吗?

顺便问一下,就购物车而言,最佳实践是什么?我应该使用cookies吗?我刚刚开始,据我所知,会话仅在您不关闭浏览器时保存数据,所以我猜将所有数据存储在 cookie 中几天并在开始时检查是否有是任何 cookie 集。如果有人可以给我一些使用简单 cookie 的好例子(以及它是否有任何缺点),请告诉我。

【问题讨论】:

标签: php ajax session


【解决方案1】:

您的&lt;?php 标记前可能有一些字符。

如果您没有看到任何字符,请在十六进制编辑器中打开您的文件,您可能会看到某种BOMs。

【讨论】:

  • 天啊...我现在很惭愧。我只是没有正确查看 2 个 add.php 文件,当我第 100 次检查时,我在打开 php 之前看到了一个选项卡。
  • 没关系!这是一生只发生一次的错误之一:)
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多