【问题标题】:codeigniter session save to database keep updating many timescodeigniter session 保存到数据库不断更新多次
【发布时间】:2013-05-05 21:10:17
【问题描述】:

我有一个问题。我正在使用最新版本的 CI。

我目前已启用会话以使用数据库,但它的工作方式只有一个问题,因为它往往会在您每次更新会话时更新数据库。

有没有办法解决这个问题,以便会话在销毁之前只更新一次数据库?!

我目前仅来自一个 CI 会话的大约 9 个更新请求 :) !所以任何帮助都会很可爱。

一个简单的代码示例,我的过程比这复杂得多,但只是为了演示目的

Controller/auth [包含真实登录的帖子]

function login(){
$trial=$this->user->attempt($this->input->post('user'),$this->input->post('pass'));

if($trial){
//1st update query
$this->session->set_userdata('user',$trial);


//Start intializing user

//2nd update query
$this->load->model('relations');//constructer will load user friends and save them to $this->session->set_userdata('relations',$rel);

//3rd update query
$this->load->model('settings');//construtor will load user settings and save them to settings
}
}

以上代码将创建 3 个更新请求,全部针对更新字段 userdata = 当前会话。

我的意思是每次我们向会话中添加东西时都不需要更新 db,它已经保存在 $_SESSION 中,所以保留它,并继续操作 $_SESSION 直到结束,

在所有运行时 -destructor- 结束时仅更新 user_data 一次,最终结果会话足以将会话保存到数据库。

请注意,CI 使用 select * from ci_session(图片中的第一个请求)从会话中加载会话,然后它只是不断重复更新会话且毫无意义,因为它不会在运行时再次选择它!

所以为什么不在加载会话库后立即加载它。并在它破坏之前保存它。这就是我想要完成的。

谢谢

【问题讨论】:

  • 当然,如果您决定将会话数据存储在数据库中,那么每次更新会话时都必须更新数据库?为什么不希望它更新?
  • 当然应该更新.. 但只有一次就足够了!它不必每次都更新..在所有工作完成后只更新一次怎么样?
  • 程序中的哪些代码导致了这些请求?
  • 请发布更新会话的代码。
  • '我的观点是每次我们向会话中添加一些东西时都不需要更新数据库,它已经保存在 $_SESSION 中,所以保留它,并继续操作 $_SESSION 直到结束, ' CodeIgniter 使用原生 PHP 会话,所以 $_SESSION 无关紧要 - 尝试 print_r($_SESSION) 看看它是否为空。会话数据存储在数据库中,这就是为什么要更新会话数据时必须更新它的原因。 Reading the user guide should provide more useful information.

标签: codeigniter session codeigniter-2 destructor


【解决方案1】:

我找到了解决方案,使用以下代码从会话中获取现有用户数据

$userdata = $this->session->all_userdata();
$userdata['fname'] = 'John';
$userdata['lname'] = 'Mulharn';
$userdata['email'] = 'Mulharn@john.com';
$this->session->set_userdata($userdata);

所有这些都发生在 1 个事务中,而不是 3 个数据库事务中。 希望有帮助。

【讨论】:

    【解决方案2】:

    可以通过传递一个包含所有值的数组来更新会话,而不是一次只做一个。再看看用户指南

    【讨论】:

    • 这和什么有什么关系?
    • 我无法从您的代码中看出,但我猜您正在分别更新各个值。如果您不想继续更新,请查找更新发生的位置并停止更新。否则,不要使用数据库更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2023-03-13
    • 2019-03-24
    相关资源
    最近更新 更多