【问题标题】:Session update through multiple ajax calls通过多个 ajax 调用更新会话
【发布时间】:2011-12-26 01:40:05
【问题描述】:

“问题:”
我用 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

有什么问题?
我希望你明白这一点:)

编辑:我忘了提到有时我会得到第二个(通常期望的),但大多数时候我会得到第一个版本。

【问题讨论】:

  • 猜猜这应该如你所愿。如果在添加 abc 之前回显会话,输出会是什么?
  • @Flo 什么都没有,它不存在
  • 您是否使用 jquery 进行 AJAX 调用?我之所以问是因为我遇到了一个问题,除非我输入完整路径(包括域),否则我的会话在我的 ajax 调用的服务器端无法被识别。

标签: php ajax session session-variables


【解决方案1】:

也许在附加一些东西之前将$_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。

【讨论】:

  • 是否启用了 Cookie?您是否在多个浏览器上进行过测试?您能否将 PHP 调用添加到 header() 以防止浏览器缓存 Ajax 响应(=> 答案已更新)?
【解决方案2】:

我找到了解决方案...所以 4 个月后我可以回答它:)

解决方案似乎很简单,但我没有先考虑它。我认为这是一个“更深层次”的问题,因为我的代码很长。所以解决方案是包含 session_start();在“index.php”文件中(您在其中调用 ajax 本身或在其中包含 .js 文件)。 如果将来有人遇到这些愚蠢的“simptoms”,我希望它会有所帮助。* 因此,即使您不在“index.php”文件中使用会话,如果您想在 ajax“处理程序”php 文件中使用会话,也必须在其中包含 session_start()。

(当然,你也必须将 session_start(); 包含到hander.php 中。)

【讨论】:

    【解决方案3】:

    我知道这是一个非常古老的问题,但在遇到同样的行为之后,我在想确认我今天早些时候读到的内容时偶然发现了它。

    对于我的应用程序,我们已经在使用 session_start() 并且正在使用自定义数据库处理程序处理会话。但是,在各种 AJAX 请求中将数据记录到会话时,我们仍然遇到错误。

    运行并发处理会话数据的 AJAX 请求的问题在于 PHP 默认情况下一次只允许一个脚本访问会话:从调用 session_start() 到退出或调用 session_write_close ()。当您同时发生多个需要写入会话的 AJAX 请求时,它们可能会相互影响,最终导致数据不完整。

    这比我能解释得更好:[http://konrness.com/php5/how-to-prevent-blocking-php-requests]。

    我的特殊解决方案是将数据存储在会话之外(数据库中的其他位置),这样其他 AJAX 请求就不会影响我的更改。

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2013-01-20
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多