似乎还有许多旧的 CI版本在使用中,我希望增加两个百分点,尽管这一版已经过时。 我刚刚花了几天时间解决了《国际宇宙航空研究宪章》在《国际公认法典》中发出的呼吁问题,我有一个解决办法,涉及主要问题,尽管某些解决办法是 wonder的。 我(现在)使用的 CI版是2.1.3
。
我的申请要求美国宇宙航空研究开发机构更新最后的活力领域,以维持一个有效的会议,因此,我仅仅放弃更新关于美国宇宙航空研究开发机构呼吁的会议是不够的。
ess版(我尚未对最近版本进行调查)的错误检验和基本内容(我尚未调查)以及许多问题开始到那里。
第一部分:<代码>sess_update()
几内亚民主军多次呼吁创造种族条件,使数据库被锁定,供日后打电话。 如果我们试图进行更新问询,但数据库被锁定,我们就会发现错误,问答错误,但厨师仍在更新新数据。 BAD! 而且,我们不需要举行新的会议——每次阿贾克斯呼吁都这样做。 我们只需要更新最后活动。 为此:
function sess_update()
{
// We only update the session every five minutes by default
if (($this->userdata[ last_activity ] + $this->sess_time_to_update) >= $this->now)
{
return;
}
// Save the old session id so we know which record to
// update in the database if we need it
$old_sessid = $this->userdata[ session_id ];
//Assume this is an AJAX call... keep the same session_id
$new_sessid = $old_sessid;
if( !$this->CI->input->is_ajax_request() ){
//Then create a new session id
while (strlen($new_sessid) < 32)
{
$new_sessid .= mt_rand(0, mt_getrandmax());
}
// To make the session ID even more secure we ll combine it with the user s IP
$new_sessid .= $this->CI->input->ip_address();
// Turn it into a hash
$new_sessid = md5(uniqid($new_sessid, TRUE));
}
// _set_cookie() will handle this for us if we aren t using database sessions
// by pushing all userdata to the cookie.
$cookie_data = NULL;
// Update the session ID and last_activity field in the DB if needed
if ($this->sess_use_database === TRUE)
{
//TRY THE QUERY FIRST!
//Multiple simultaneous AJAX calls will not be able to update because the Database will be locked. ( Race Conditions )
//Besides... We don t want to update the cookie if the database didn t update
$query = $this->CI->db->query($this->CI->db->update_string($this->sess_table_name, array( last_activity => $this->now, session_id => $new_sessid), array( session_id => $old_sessid)));
if( $query ){
// Update the session data in the session data array
$this->userdata[ session_id ] = $new_sessid;
$this->userdata[ last_activity ] = $this->now;
// set cookie explicitly to only have our session data
$cookie_data = array();
foreach (array( session_id , ip_address , user_agent , last_activity ) as $val)
{
$cookie_data[$val] = $this->userdata[$val];
}
// Write the cookie
$this->_set_cookie($cookie_data);
}else{
//do nothing... we don t care, we still have an active retreivable session and the update didn t work
//debug: error_log( "ERROR::" . $this->CI->db->_error_message() ); //Shows locked session database
}
}else{
// Update the session data in the session data array
$this->userdata[ session_id ] = $new_sessid;
$this->userdata[ last_activity ] = $this->now;
// Write the cookie
$this->_set_cookie($cookie_data);
}
}
第二部分:<代码>sess_read()
这里的类似问题...... 数据库有时在盘问时被锁定。 除此以外,我们不能忽视错误。 我们试图阅读本届会议,看看它是否存在......这样,如果我们遇到一个锁定的数据库错误,我们就可以检查错误和(再次)(如果需要的话,会同时进行)。 在我的测试中,我从未使它陷入两条).。 而且,我不了解你的情况,但我不想让瑞典公司通过不核对虚假的询问结果而陷入致命的错误。 你们需要在本届会议的顶点这样做。 如果你想直接尝试这一法典,则将提交:
var $sess_query_attempts = 5;
请注意,整个<条码>已到<>。 职能
$query = $this->CI->db->get($this->sess_table_name);
//Multiple AJAX calls checking
//But adding add a loop to check a couple more times has stopped premature session breaking
$counter = 0;
while( !$query && $counter < $this->sess_query_attempts ){
usleep(100000);//wait a tenth of a second
$this->CI->db->where( session_id , $session[ session_id ]);
if ($this->sess_match_ip == TRUE)
{
$this->CI->db->where( ip_address , $session[ ip_address ]);
}
if ($this->sess_match_useragent == TRUE)
{
$this->CI->db->where( user_agent , $session[ user_agent ]);
}
$query = $this->CI->db->get($this->sess_table_name);
$counter++;
}
if ( !$query || $query->num_rows() == 0)
{
$this->CI->db->where( session_id , $session[ session_id ]);
$query = $this->CI->db->get( $this->sess_table_name );
$this->sess_destroy();
return FALSE;
}
不管怎么说,那里对这个问题没有完全的答案,我感到,我与那些在像我国这样使用吨的亚马斯特加的矿址上可能仍然经历过早期会议时间点的人分享我的调查结果。