“问题:”
我多次使用ajax调用handler.php文件。
在handler.php中我有:
session_start();
$_SESSION['foo'] .= 'abc';
echo 'Session var: '.$_SESSION['foo'].'<br>';
现在,我看到的是:
Session var: abc
Session var: abc
Session var: abc
... etc
而不是:
Session var: abc
Session var: abcabc
Session var: abcabcabc
问题是什么?
我希望你明白这一点:)
答案 0 :(得分:2)
在向其添加内容之前,可能会将$_SESSION['foo']
定义为空字符串:
session_start();
// prevent caching
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
if (!isset($_SESSION['foo']))
$_SESSION['foo'] = '';
$_SESSION['foo'] .= 'abc';
echo 'Session var: '.$_SESSION['foo'].'<br>';
检查您的浏览器是否启用了Cookie。
答案 1 :(得分:0)
我找到了解决方案......所以4个月后我就可以回答了:)
解决方案似乎很容易,但我没有先考虑它。我认为这是一个“更深层次”的问题,因为我的代码很长。所以解决方案是包含session_start();在“index.php”文件中,(您调用ajax本身或包含.js文件的位置)。 如果将来有人遇到这些愚蠢的“症状”,我希望这会有所帮助。* 因此,即使您不在“index.php”文件中使用会话,如果您想在ajax“handler”php文件中使用会话,也必须包含session_start()。
(当然,你也必须将session_start();包括在hander.php中。)
答案 2 :(得分:0)
我知道这是一个非常古老的问题,但是在遇到同样的行为之后,我想要确认我今天早些时候读到的内容时发生了这件事。
对于我的应用程序,我们已经在使用session_start()并使用自定义数据库处理程序处理会话。但是,在各种AJAX请求中将数据记录到会话时,我们仍然遇到错误。
运行操作会话数据的并发AJAX请求的问题是PHP默认情况下只允许一个脚本一次访问会话:从调用session_start()到退出时或以其他方式调用session_write_close ()。如果同时发生需要写入会话的多个AJAX请求,它们可以相互踩踏,最终会得到不完整的数据。
这比我能解释得更好:[http://konrness.com/php5/how-to-prevent-blocking-php-requests]。
我的特定解决方案是将数据存储在会话之外(数据库中的其他位置),以便其他AJAX请求不会踩到我的更改。