2016-05-30 6 views
0

サーバー側でニスを使用するmagentoウェブサイトから新しいコンテンツを取得しようとしています。私のプラグインは次のように動作します。ユーザーがボタンをクリックしたときにワニスキャッシュを自分のモジュールでバイパスします

  • 、それは私がこのセッションIDを取得し、ユーザーのカートを思い出す外からセッションID
  • を構築するコントローラを呼び出します。セッションIDはユーザーに応じて変更されますが、匿名のブラウザセッションでユーザーリンクを開く場合でも、ページの内容は変更されません。

ニスで作業しなくても、プラグインでワニスキャッシュ制御をバイパスする方法はありますか?私はサーバーにアクセスできない。

+0

、ワニスはcookied要求をキャッシュしません。 – pvg

答えて

0

この種の問題の一般的な慣行は、実際にはのキャッシュバスターをgetパラメータの形式で使用することです。

Varnishは実際にページにアクセスするために使用するルートに依存しているため、同じページで終了する別のURLは、新しいページとしてVarnishによって処理され、それに応じてキャッシュされます。

したがってhttp://www.example.com/http://www.example.com/?cache_buster=1464645205と全く同じページですが、ワニスはそれらを2つの異なるページと2つの異なるキャッシュエントリとして扱います。

私が使用した番号にはタイムスタンプがあり、キャッシュされていないバージョンのページにアクセスするたびに簡単に生成できることに注意してください。

Magentoは、URLがhttp://www.example.com/module_front_nanme/controller_name/action_name/parameter_name_1/value_1/parameter_name_2/value_2という形式で構築されているため、実際には「route like」の取得パラメータがあります。

あなたが実際にカートにアクセスできるようにするには、特定のコントローラーで生成するセッションIDに基づいて、上記のセッションIDをカートにリダイレクトすることです。

/** 
* Please not this is an action that should be done in a controller 
*/ 
public function someExampleAction() { 
    /** 
     * I am generating a timestamp here as stated above, 
     * but it could be generated any other way, or you can keep 
     * your session id "secret" if that is of any concern for your but 
     * couple it with a simple cache buster from a timestamp as I did here 
     */ 

    $sessionId = time(); 
    /** 
     * This will redirect you to 
     * http://www.example.com/checkout/cart/index/cache_buster/1464645205 
     */ 
    $this->_redirect('checkout/cart', array('cache_buster' => $sessionId)); 
} 

あなたがコントローラでない場合、あなたはMage::getUrl()全く同じ方法でURLを取得することができます:デフォルトの設定で

/** In any context */ 
$sessionId = time(); 
Mage::getUrl('checkout/cart', array('cache_buster' => $sessionId)); 
関連する問題