在没有警告的情况下将session_start()与AJAX一起使用

时间:2013-12-28 18:10:06

标签: php ajax session

我使用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的好例子(如果它有任何缺点),请告诉我。

1 个答案:

答案 0 :(得分:1)

可能您在<?php标记之前有一些字符。

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

相关问题