【问题标题】:Updates made to users session data in Ajax are lost after ajax returnsajax 返回后,在 Ajax 中对用户会话数据所做的更新会丢失
【发布时间】:2014-01-18 17:34:31
【问题描述】:

我正在使用 Ajax 调用来更新用户数据并将值存储在会话中。

(请注意,我不是在谈论将会话存储在数据库中)。

在 ajax 控制器中我这样调用:

$this->session->userdata['user']['email'] = 'some_new_email@blah.com';

然后为了测试它是否有效,我说:

print_r($this->session->all_userdata());

我可以清楚地看到会话已按预期更新。

但是,一旦我从 ajax 控制器返回,我会说:

print_r($this->session->all_userdata());

我刚刚更新的会话变量的值已经恢复到之前的(旧)状态。

问题:

为什么会发生这种情况,我该如何解决?

欢迎提出任何建议..

代码:

1) jquery ajax 调用将用户数据发布到此处: 然后将数据发送到 api,在该 api 中(再次)对其进行验证,然后在数据库中进行更新。 $response 是api调用的结果(json格式的更新用户对象):

$response = $account_repository->update_email($update_email_entity);

if($response['status']['code']==200)
    {
        // [Update users email in database was a success, now update session to reflect changes]:
        $this->session->userdata['users']['email'] = $response['payload']['email'];
        print_r($this->session->all_userdata());
    }
    else ...

2) 上面的 print_r 显示会话已正确更新。 ajax 返回后,我刷新页面(页面上有一个包含所有用户会话数据的 print_r)。 会话数据尚未更新。

信息:

我的 ajax 控制器函数只是帐户控制器中的另一个函数。同一控制器中的其他功能对会话进行更新,一切正常。只是当通过ajax访问控制器功能时,我遇到了这个问题。

以前有人见过这个问题吗?关于修复它的任何建议?

【问题讨论】:

  • 你能添加你的代码吗?
  • 好像你在使用 CodeIgniter 框架,如果是这样试试:$this->session->set_userdata('email', 'new@email.com');
  • 我在上面添加了一些代码 - 谢谢

标签: php jquery codeigniter session


【解决方案1】:

也许 session_regenerate_id 是你的问题。您的 XHR 调用会重新生成 sessionId 而不会删除旧的会话文件。下一个调用通过 cookie 使用旧 session_id。

例如.. 当 AJAX 完成后,sessionId 会更新并生成一个新的,并且可能会在数据库中更新,但浏览器中的 cookie 不会更新,因此下次浏览器请求新页面时,它会发送一个带有错误会话 id 的 cookie 并且会话无效或检索到旧数据。

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 2014-04-18
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多