【问题标题】:CodeIgniter $this->session->set_userdata() on 2 simultaneous AJAXCodeIgniter $this->session->set_userdata() on 2 同时 AJAX
【发布时间】:2015-02-28 10:05:01
【问题描述】:

我在 codeIgniter 上有 simulatneous AJAX 请求,所有这些请求都像这样进行会话更新:

function ajax1($value)
{
    $this->session->set_userdata('foo', $value);
}

function ajax2($value)
{
    $this->session->set_userdata('bar', $value);
}

但有时由于 MySQL 并发,一个变量或另一个变量没有更新,我想是因为如果从数据库中抓取,一个方法会用旧值覆盖另一个方法的新值。

我无法同时更新这 2 个会话,因为它们做的事情完全不同,而且我不知道会调用哪些会话,因为页面是动态的,并且可能有一个或多个这样的方法调用。

过去有人遇到过这个问题并且有办法解决这个问题吗?

【问题讨论】:

  • codeIgniter 的哪个版本?
  • CodeIgniter 版本为 2.1.4

标签: php mysql ajax codeigniter session


【解决方案1】:

我认为这个问题已在最新版本的 codeIgniter 中得到解决,但如果您仍在使用旧版本,请尝试将 system/libraries/Session.php 替换为新版本,或者您可以像这样覆盖 Session Library关注:

应用程序/库/MY_Session.php

class MY_Session extends CI_Session
{
    function sess_update()
    {
        if (!$this->CI->input->is_ajax_request())
            return parent::sess_update();
    }

}

【讨论】:

  • 我考虑过更新,但在更新日志中我没有看到任何关于此问题的修复:ellislab.com/codeigniter/user-guide/changelog.html 我想我会尝试更新,看看会发生什么然后回到这里!
  • 好吧,更新什么也没做。我在一个不同的解决方案中看到了关于覆盖会话类,但我需要在 AJAX 中更新这些会话,我不能只是丢弃它,接下来我会尝试你的解决方案 1
  • 好吧,我尝试了你所有的想法,仍然有会话值被覆盖
  • 您确定使用 My_session 类而不是 CI_session 吗?尝试在 sess_update() 时打印一些东西
  • 是的,除了在我们的代码中注释掉的行: //parent::sess_update();但是我还是没看明白,我们需要在我们的方法中更新AJAX上的会话,为什么要禁用它呢?
猜你喜欢
  • 2018-03-11
  • 1970-01-01
  • 2020-12-06
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 2016-09-26
  • 1970-01-01
相关资源
最近更新 更多