2012-06-30 11 views
10

データベースにセッションを保存するにはどうすればよいですか? 私はこのコードを使用して、それをやった:データベースのPHPセッション

function write ($session_id, $session_data) 
// write session data to the database. 
{ 
    if (!empty($this->fieldarray)) { 
     if ($this->fieldarray['session_id'] != $session_id) { 
      // user is starting a new session with previous data 
      $this->fieldarray = array(); 
     } // if 
    } // if 

    if (empty($this->fieldarray)) { 
     // create new record 
     $array['session_id'] = $session_id; 
     $array['date_created'] = getTimeStamp(); 
     $array['last_updated'] = getTimeStamp(); 
     $array['session_data'] = addslashes($session_data); 
     $this->_dml_insertRecord($array); 
    } else { 
     // update existing record 
     if (isset($_SESSION['logon_user_id'])) { 
      $array['user_id'] = $_SESSION['logon_user_id']; 
     } // if 
     $array['last_updated'] = getTimeStamp(); 
     $array['session_data'] = addslashes($session_data); 
     $this->_dml_updateRecord($array, $this->fieldarray); 
    } // if 

    return TRUE; 

} // write 

しかし、どのように私は前のようにautomaticalyそれを削除する必要があります。私はタイムアウト後に自動的にセッションを削除する方法を意味しますか?

+0

なぜ単純に$ _SESSIONオブジェクトをシリアル化しないのですか? –

答えて

-1

を:

<?php 
    session_destroy(); 
?> 
1

私はこれまでにこれを処理しなければなりませんでしたが、2つの解決策があります。いずれもきれいではありませんが、ここではそれがあります。イベント(緩く)のために

  1. 、スクリプトがサーバーに送信されたセッションIDがあった場合、そのセッションは、データベースにある場合、それが表示されますを確認して、もしセッションます期限切れです。セッションDBへの接続を確立するとすぐに、現在のタイムスタンプを超える有効期限を持つすべてのレコードに対してDELETEクエリを実行することを検討することがあります。その後、ユーザーが送信したばかりのIDを検索します。あなたのサイトを使うたびにクリーンアップが実行されています。

  2. 次の方法は、CHRONジョブまたは他の自動スクリプトを使用して期限切れのエントリを消去することです。あなたのセッションテーブルこれは、サイトが軽度でまれなトラフィックを受信する場合に適しています。

これの組み合わせです。スクリプトでセッションを検証するときに、セッションデータが見つかったら有効期限を確認します。 IDが見つかったがセッションが期限切れになっている場合は、セッションを削除して新しいセッションを開始します。このようにすれば、IDの衝突やサーバーの速度を低下させる多くの問題に遭遇する必要はありません。あなたは毎日最後にあなたのchronジョブを実行して、完全なクリーンアップを実行することができます。

システムに、手動でログアウトする行為によってユーザーセッションの削除がトリガーされるようなタイプのログアウトボタンがあることを確認してください。

0

HTTP_Session2をご覧ください。 PEARのドキュメントから:

HTTP_Session2は、DBやMDB2パッケージを使用して、セッションデータ用データベースストレージなどの追加機能を提供します。また、isNew()、useCookies()、setExpire()、setIdle()、isExpired()、isIdled()などの新しいメソッドを紹介します。

あなたが実装したい場合は、そのパッケージ内のMDB2.phpのコードを見てください。それは、session_set_save_handlerと組み合わされたガベージコレクションメソッド(gc)を含んでいます。