3 回答
TA贡献1830条经验 获得超9个赞
尝试这个
<?php
/**
* ------------------------------------------------------------------------
* CI Session Class Extension for AJAX calls.
* ------------------------------------------------------------------------
*
* ====- Save as application/libraries/MY_Session.php -====
*/
class MY_Session extends CI_Session {
// --------------------------------------------------------------------
/**
* sess_update()
*
* Do not update an existing session on ajax or xajax calls
*
* @access public
* @return void
*/
public function sess_update()
{
$CI = get_instance();
if ( ! $CI->input->is_ajax_request())
{
parent::sess_update();
}
}
}
// ------------------------------------------------------------------------
/* End of file MY_Session.php */
/* Location: ./application/libraries/MY_Session.php */
问题出在会话类的sess_update函数中,该函数在X秒后生成一个新的session_id。每个页面都有一个session_id,如果session_id在进行ajax调用之前过期,则该调用将失败。
在/ application / libraries /中创建一个名称为MY_Session(或您设置的前缀)的php文件,将此代码粘贴在那里。该函数将覆盖会话类中的sess_update函数,检查每个请求是否由ajax发出,跳过sess_update函数。
将sess_expiration设置为更高的值是一个坏主意。这是一项安全功能,可防止您受到会话干扰
PD:我的英语不太流利,如果您听不懂,请告诉我。
TA贡献1828条经验 获得超3个赞
在将其合并到稳定分支之前,解决方案(最终!)是将Areson的提交245bef5与数据库模式结合使用:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(45) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
prevent_update int(10) DEFAULT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);
有关更多信息,请从上至下阅读拉1283注释。
- 3 回答
- 0 关注
- 377 浏览
添加回答
举报