2017-01-26 7 views
0

그래서 문제가 생겼습니다.CodeIgniter App - 사용자 정보 데이터가 다른 장치에서 변경된 경우 모든 장치의 세션 데이터를 업데이트하는 방법

1. I log into website using my user information on my desktop. 
2. My sessions are set within the desktop. 
3. I log into website using a smartphone. (Now there are 2 devices logged in.) 
4. My sessions are set within smartphone. 
5. I change my user information in user settings page using my desktop. 
6. Database is updated. 
7. Sessions are updated on desktop, but not on phone. 

어떻게 수정합니까? 세션에 CodeIgniter의 데이터베이스 드라이버를 사용해야합니까? 심지어 중요할까요?

감사합니다.

+0

당신이 너무 세션에서 DB 데이터를 저장할 것 같습니다 모든 요청을 – sintakonte

+0

@ sintakonte 그래서 기본적으로 데이터베이스에 연결하고 모든 페이지로드시 타임 스탬프를 비교해야할까요? 일종의 비효율적이지 않습니까? 또는 나는 편집 성이되고있다 – radiantMemory

+0

어쩌면 당신은 어쩌면 아닙니다,하지만 당신의 요점을;) 다른 possibilites - memcache 또는 redis-이 경우 같은 설치 서비스와 같은 - 당신은 CI의 inbuilt 캐싱 드라이버를 사용할 수 있습니다 (https : //www.codeigniter.com/userguide3/libraries/caching.html#redis-caching); 값을 db에 저장하고 포인트 7은 캐시 시스템에 업데이트/삽입합니다 (캐시 시스템의 모든 요청에 ​​대해 데이터를 가져온 후에) – sintakonte

답변

0

방금 ​​session_refresh 모델을 만들고 자동로드했습니다. 다행히도 이것은 확장 될 수 있고 서버에 많은 영향을 미치지 않을 것입니다. 세션에서이 데이터를 걷어차 그것을 데리러 - 다만, 다른 가능성이있을 것 lastchange 타임 스탬프를 추가하고 DB에 세션 데이터를 비교 -

protected $CI; 

public function __construct() 
{ 
    $userdata = $this->session->userdata; 

    if (isset($userdata['uid'])) 
    { 
     /* 
     * CONNECT TO DATABASE AND, 
     * CHECK IF MODIFIED TIMESTAMPS CHANGED 
     */ 
     $query = $this->db->get_where('users', array('uid' => $userdata['uid'])); 
     $row = $query->row(); 

     /* 
     * IF THE "MODIFIED" TIMESTAMP DIFFERS, 
     * UPDATE THE SESSION WITH THE NEW DATA. 
     */ 
     if ($userdata['modified'] !== $row->modified) 
     { 
      $this->CI =& get_instance(); 
      $this->CI->load->model('user_model'); 

      $this->CI->user_model->set_user_session($row); 
     } 
    } 
}