3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
嘗試這個(gè)
<?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 */
問(wèn)題出在會(huì)話(huà)類(lèi)的sess_update函數(shù)中,該函數(shù)在X秒后生成一個(gè)新的session_id。每個(gè)頁(yè)面都有一個(gè)session_id,如果session_id在進(jìn)行ajax調(diào)用之前過(guò)期,則該調(diào)用將失敗。
在/ application / libraries /中創(chuàng)建一個(gè)名稱(chēng)為MY_Session(或您設(shè)置的前綴)的php文件,將此代碼粘貼在那里。該函數(shù)將覆蓋會(huì)話(huà)類(lèi)中的sess_update函數(shù),檢查每個(gè)請(qǐng)求是否由ajax發(fā)出,跳過(guò)sess_update函數(shù)。
將sess_expiration設(shè)置為更高的值是一個(gè)壞主意。這是一項(xiàng)安全功能,可防止您受到會(huì)話(huà)干擾
PD:我的英語(yǔ)不太流利,如果您聽(tīng)不懂,請(qǐng)告訴我。

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
在將其合并到穩(wěn)定分支之前,解決方案(最終?。┦菍reson的提交245bef5與數(shù)據(jù)庫(kù)模式結(jié)合使用:
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`)
);
有關(guān)更多信息,請(qǐng)從上至下閱讀拉1283注釋。
- 3 回答
- 0 關(guān)注
- 527 瀏覽
添加回答
舉報(bào)