【发布时间】: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