2017-02-24 3 views
0

ワニスを初めて使用した場合。 。すべてのページが設定PHPSESSIDとLANGUAGEクッキーを使用したワニスキャッシング

:それは、私はいくつかのPHPコードを改善しようとしている

:-(予想以上に、ハード取得、ニスを使用して、いくつかの時間前に開発だ このコードは、ちょうど2枚のクッキーを使用しています。。それは定義されていない場合はPHPSESSIDクッキー、それが1つのページのみに使われている匿名セッションのためしかし、このクッキー

のは、私がPage1の、ページ2、ページ3およびPage4を持っているとしましょう、次のように私の設定は次のようになります。

ページ1、ページ2 Page3はLANGUAGEクッキーを必要とし、そのクッキーでキャッシュされるべきです:1つのキャッシュfo各言語とページ。

Page 4 PHPSESSIDとLANGUAGEのCookieが必要であり、ユーザーごとに固有のものとしてキャッシュしないでください。

私のdefault.vlcが正しく動作していないので、どの方向付けも本当に安上がりでしょう。たぶん私はいくつかの概念を忘れてしまったでしょう。

sub vcl_init { 

    # When requests come to Varnish I need to remove PHPSESSID so it's not used for the hash in caching. Page4 doesn't need caching as it's specific for each user: 
     if (req.http.host ~ "Page4") { 
     return(pass); 
     } 

    # remove PHPSESSID so pages1, 2, and 3 get cached just once for everyuser but in all languages. 

     if ((req.url !~ "page4")) { 
      set req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID=[^;]+(;)?", ""); 
     } 

    return (hash); 


    } 

私はそう、私はvcl_hashに含めるLANGUAGEクッキーとウェブページをキャッシュする必要があります。

sub vcl_hash { 
    hash_data(req.url); 
    if (req.http.host) { 
    hash_data(req.http.host); 
    } else { 
    hash_data(server.ip); 
    } 

    # hash cookies for requests that have them 
    if (req.http.Cookie) { 
    hash_data(req.http.Cookie); 
    } 
} 

は、どのように私はちょうどPHPSESSIONIDを削除することができますか?

sub vcl_backend_response { 
    # Called after the response headers has been successfully retrieved from the backend. 

    if (!(bereq.url ~ "Page4")) { 
    unset beresp.http.set-cookie; 
    } 
    return (deliver); 

} 

答えて

1

あなたは正しい方向にあります。私があなたの質問を理解していれば、動作しないのは、単にPHPSESSIDを削除するのではなく、すべてのクッキーサーバーの応答(ページ4でない場合)を削除することです。

sub vcl_backend_responseでregexpを実行すると、urlがPage4でない場合はphpsessionidのみを削除できます。また

beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "PHPSESSID=[^;]+(;)?", "") 

あなたは上記のワニス4またはを使用している場合、あなたはクッキーの取り扱いがはるかに容易になりVMODクッキー(正規表現のためのこれ以上の必要性)を使用する必要があります。

関連する問題