2010-12-12 3 views
6

Codeigniterの上にショッピングカート付きのWebサイトを開発しています。sess_use_database設定を使用して、ユーザーがショッピングカートをハックするのをより困難にしたいセッション。Codeigniter - セッションのデータベースキャッシュを回避する方法

私も(例えばDBの内容のほとんどは定期的に変更されませんよう「カテゴリを取得」など)の共通DB要求をスピードアップするために、データベースキャッシュを使用したいので、私は、この設定を有効にしている:

$db['development']['cache_on'] = TRUE; 
//where 'development' is my environment 

その結果、私はそのセッションの内容は、この要求に、たとえば、リフレッシュされていない見つけています:

$this->db->cache_off(); 
:また

$this->basket_contents = array_values($this->session->userdata('basket_contents')); 

、私はこれを試してみました

...セッション要求の前に、問題を解決しません(直接のDB要求ではないため)。次のように

マイセッションsetingsは以下のとおりです。

$config['sess_cookie_name']  = 'str_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

私はセッション関連のDB要求のキャッシングを防ぐことはできますか?または、特定のテーブルがキャッシュされないようにしますか?

ORは私が考えていない別の(おそらく明白な)ソリューションですか?

ありがとうございます。

答えて

3

CodeIgniterのキャッシングはオール・オア・ニーのソリューションであり、個々のテーブルに対して有効にすることはできません。

私は考えることができる2つのオプションがあります。

  • CIの一般的なキャッシュを使用しますが、http://philsturgeon.co.uk/code/codeigniter-cache
  • ハックdb_driver.phpのようにキャッシュライブラリを使用しませんが。 265行目(CI 1.7.2)では、キャッシュが有効になっているかどうかを確認します。その行を変更して、セッションテーブルのSELECTのときに行なわないようにします。文字列を使用して、ファイルシステム内の

    /ライブラリ/ Session.php

    検索ライン「$クエリ=の$ this - >:簡単な解決策があるかもしれません2.2.1までバージョンで

+0

よろしくお願い致します。私は最初のオプションから始めます。 – Ade

1

CI-> db-> get($ this-> sess_table_name); "

ラインプットの前に
  1. :ラインプット後

    // saving cache_on 
    $cache_on = $this->CI->db->cache_on; 
    $this->CI->db->cache_on = false; 
    
  2. // restoring cache_on 
    $this->CI->db->cache_on = $cache_on; 
    

これはあなたのキャッシュロジックを残して、この正確なセッションクエリのMySQLのキャッシュを防ぐことができますそのまま。

この編集はフレームワークシステムファイルに関係しているので、CIを上位バージョンにアップグレードすると、このハックは失われます。

関連する問題