【发布时间】: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 的好例子(以及它是否有任何缺点),请告诉我。
【问题讨论】:
-
我只是过于复杂了。问题是 AJAX 调用的文件中
-
顺便说一下@JohnConde 指出的链接真的很棒!谢谢。