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