我现在已经挣扎了两个小时了,我已经把这个问题缩小到一个简单的测试用例。我做了大量的研究,最后决定尝试重现这个问题的第一个答案:Set session var with ajax。
当我按下这个按钮时(懒惰的HTML,但那不是问题所在):
<html>
<head>
...
<script src="jquery.js"></script>
...
<head>
<body>
....
<?php
var_dump($_SESSION);
?>
<input type="button" class="update">
....
</body>
</html>
jquery.js中的这个ajax请求被调用:
$.(".update").click(function() {
$.ajax({
type: "POST",
url:"setSession.php",
data: {bar: "foobar"},
success: function() {
console.log("Successful request sent");
}
});
最后是setSession.php文件:
<?php
session_start();
$_SESSION["foo"] = $_POST["bar"];
?>
成功消息将打印到控制台,因此我知道我正在点击正确的文件。为什么会话变量没有设置?我有php 5.5.2,如果这很重要的话。谢谢你的帮助!
答案 0 :(得分:0)
就像我在评论中建议的那样,这样做是为了修复你的代码:
在success
上重新加载页面:
success: function() {
console.log("Successful request sent");
location.reload();
}
确保在使用会话的所有页面中都有session_start()
:
session_start(); //this must be at the top, before you print anything
答案 1 :(得分:-1)
这可以帮助你。
在setSession.php
中写echo $_SESSION["foo"] = $_POST["bar"];
在你的ajax脚本中
$.(".update").click(function() {
$.ajax({
type: "POST",
url:"setSession.php",
data: {bar: "foobar"},
success: function(e) {
console.log(e);
}
});
现在打开浏览器console
(F12
)。点击你的button.update。检查控制台中是否写有bar
。