2014-07-25 29 views
0

在發佈問題之前,我嘗試了很多。我找不到解決方案。請幫助任何人。 我有由codeigniter開發的應用程序。此應用程序具有用戶登錄頁面,當用戶登錄時用戶詳細信息會話將被創建並存儲到會話表中。在表中爲特定用戶代理限制Codeigniter會話創建

$data = array(
       'username' => $this->input->post('user_name'), 
       'is_logged_in' => true 
      ); 
      $this->session->set_userdata($data); 

當我使用上面的代碼codeigniter自動插入到我的會話表(dt_usersession)。

如果有人試圖用相同的用戶名和密碼登錄,我可以通知他們,就像其他人已經使用相同的細節登錄一樣。如果他/她想要登錄,我會要求他們輸入他們的安全密鑰,以便在表中關閉他們以前的會話,我將允許登錄當前用戶。 我會每隔2min檢查ajax是否存在當前會話,如果不是,頁面將終止並重定向到登錄頁面。這將完美適用於我的Web應用程序。

而且我有android應用程序,當我從android新會話頻繁創建(每次調用新會話創建表)中調用我的codeigniter控制器時。 因此,當我檢查每一分鐘是否有其他人使用相同的用戶名和密碼登錄我的會話表不斷創建新的行。所以我的服務器負載越來越大。因爲越來越多的用戶使用我的應用程序爲每個用戶請求多次創建新記錄。如何解決這個問題,請幫助任何人

回答

0

您可以創建在/應用MY_Session類/庫文件夾,並覆蓋取決於條件,像這樣的默認配置文件:

class MY_Session extends CI_Session { 

    public function __construct() { 
     if(User::isLoggedIn()) 
     { 
      $params = array(
       "sess_use_database" => true, 
       "sess_table_name" => "CI_Session" // ... all other settings you may need 
      ); 
     } 
     else 
     { 
      $params = array(); 
     } 

     // initialize parent session with correct params 
     parent::__construct($params); 
    } 

} 

或者,您可能希望爲會話創建自己的表(僅限於CI界限),並只存儲登錄用戶的ID,會話ID(session_id()see manual)和時間戳,並在保留CI會話的同時繼續檢查該表。