簡體   English   中英

如何在代碼點火器中延長會話超時?

[英]How to extend session time out in code igniter?

在我的config.php ,配置文件中與會話相關的配置如下:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 1800; //30 minutes
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'rd_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

對於網站的正常使用,會話將在登錄半小時后過期。 但是我的網站上有一個功能,用戶可以玩基於計時器的任務。 例如,當用戶單擊按鈕時,計時器啟動,一段時間后他執行某些任務,完成后,他單擊“停止”按鈕,計時器停止並且時間保存在數據庫中。

這里的問題是任務可能會延遲30分鍾以上,因此當用戶播放計時器時會話會過期。 我無法在config中更改sess到期時間,因為對於其他用戶(未使用計時器的用戶),它應在30分鍾后超時。 因此,正如其他線程中所建議的那樣,當用戶啟動計時器時,我進行了ajax調用來動態更改sess到期時間。 這是方法,稱為-

 public function sessiontimeout($time){
    $session_lifetime = $time > 0  ? $time: 864000;
    $this->config->set_item('sess_expiration', $session_lifetime);
    echo "Session lifetime set to ".$this->config->item("sess_expiration")." seconds";
    exit;
}

但是,此操作無效,用戶將在30分鍾后退出。 當單擊計時器時,如何實現Ajax調用以延長現有的超時,而當計時器停止時,會話過期時間重置為30分鍾,我該如何實現這一點。

謝謝

嗨,您不需要更改配置文件。 您只需在間隔時間過后再運行ajax,然后再登錄控制器功能即可。
意味着我們正在通過ajax請求訪問登錄后URL。 codeigniter自動更新當前登錄用戶會話。 那很簡單

唯一有效的方法是,我每2分鍾撥打一次ajax電話,然后檢查會話是否即將過期。 我在會話過期前5分鍾重置了會話。

Javascript Ajax調用。

var sessionTimer = setInterval(function(){
  $.ajax({
            url: '/ajax/sessiontimeout',
            beforeSend: function(){},
            success: function(data){
                console.info(data);
            }
        });
},120000);

和控制器方法

public function sessiontimeout(){

        $lastActivity = $this->session->userdata('last_activity');
        $configtimeout = $this->config->item("sess_expiration");
        $sessonExpireson = $lastActivity+$configtimeout;


        $threshold = $sessonExpireson - 300; //five minutes before session time out

        $current_time = time();

        if($current_time>=$threshold){
            $this->session->set_userdata('last_activity', time()); //THIS LINE DOES THE TRICK
            echo "Session Re-registered";
        }else{
            echo "Not yet time to re-register";
        }

        exit;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM