2012-02-11 22 views
6

セッションがCodeigniterでどのように機能するかを調べようとしています。オンラインマニュアルを読むと、次のように表示されます。Codeigniterのセッションの仕組み

セッションデータが存在しない場合(または期限が切れている場合)、新しいセッションが作成されてクッキーに保存されます。セッションが存在する場合、その情報が更新され、クッキーが更新されます。各更新で、session_idが再生成されます。

注:セッションクッキーはプロセッサの負荷を軽減するために、デフォルトでは5分ごとに更新されます。ページを繰り返しリロードすると、最後にクッキーが書き込まれてから5分以上経過した場合にのみ、「最後のアクティビティ」時間が更新されます。この時間は、あなたのsystem/config/config.phpファイルの$ config ['sess_time_to_update']行を変更することで設定できます。

質問

  1. セッションクラスを持つページがロードされたときにセッションが存在する場合は更新され、どのような情報?これはセッションIDがクッキーに保存されているのか、それともセッションデータ自体がデータベースに保存されていますか?
  2. セッションCookieは5分ごとに更新されます。ユーザーが5分以内にページAからページBに移動し、新しいセッションデータを追加する必要がある場合はどうなりますか?論理的にセッションデータを更新する必要がありますので、私は間違ってこの行を理解していると思います...この場合、セッションクッキーが5分ごとに新しいセッションIDを取得すると推測します。

説明が役立ちます。

+0

私も混乱が生じています。私はCI 1.7.2で奇妙な行動をしなければならない。私はDB型のセッションアプリケーションを正常に動作を使用します。 DB型の場合、falseはアプリケーションを非常に遅くします。助言がありますか? –

答えて

2

はい、セッションIDはCookieに保存されています。これは5分ごとに再生成されます。再生成するときは、最初に現在のセッションデータを取得し、それを新しいセッションIDに割り当てます。 CIセッションライブラリ、関数sess_update()から

コード:

// 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']; 
$new_sessid = ''; 
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)); 

// Update the session data in the session data array 
$this->userdata['session_id'] = $new_sessid; 
$this->userdata['last_activity'] = $this->now; 
+0

この有益な情報を本当にありがとう、そしてプログラミングの愛のために。 –