0

ExpressionEngine を CMS として使用するサイトがあります。また、サイトの e コマース部分でも Magento のカートを使用しています。Cookie に問題があり、さまざまな地域でアクセスできるようにしています。

検索の選択に Cookie を使用するため、ユーザーがスケジュール ページに戻ったときに、最大 2 日前に保存した最後の選択が記憶されます。

また、以下のコメントに示されている URL を使用して、URL を使用して設定することも許可します。Cookie は、最後のセグメントまたは最後の 2 つのセグメントに基づいて、スケジュールの項目をフィルタリングするために使用されます。

//*****************************************************************************
// This is from an Expressionengine base template to set the cookie before the
// header is sent.
// These are ExpressionEngine tags that evaluate the path segments
// the URL is www.mysite/schedule/CMOL or www.mysite/schedule/CM/TX
//*****************************************************************************
{if segment_1 == "schedule" }
  {if segment_2 != ""}
<?php  
    $state = '{segment_3}'; // Could be empty
    $pro = '';
    //*******************************************************
    // clear the searchItems cookie
    // this doesn't actually clear the cookie for some reason.
    //*******************************************************
    setcookie("searchItems", "", time()-7200, '/schedule/');
    {if segment_2 == 'CMOL'}
        $state = 'OL';
        $pro = '21_FUN,22_HAN,23_MEA,24_FSR,25_ADM';
    {/if}
    {if segment_2 == "CM"}
        $pro = '21_FUN,22_HAN,23_MEA,24_FSR,25_ADM';
    {/if}
    $cookie = '2013][][0][25]['.$state.']['.$pro.'][true';

    //*******************************************************
    // Now reset it to the pro and/or state selection expires 
    // 2 days from now.
    //*******************************************************
    setcookie("searchItems", $cookie, time()+172800, '/schedule/');
?>  
  {/if}

さて、スケジュール ページには、window.onUnload に Cookie を設定するための JavaScript がいくつかあり、検索設定用の Cookie を設定します。JavaScript で Cookie を設定するために使用されるコードと値は次のようになります。

// Values
// c_name  = "searchItems"
// c_value = "2013%5D%5B%5D%5B0%5D%5B25%5D%5BOL%5D%5B16_FUN%2C17_HAN%2C18_MEA%2C19_FSR%2C20_ADM%5D%5Btrue; path=/schedule/;;  expires=Sat, 26 Jan 2013 17:09:37 GMT"

//*******************************************************   
// Function to set the search preference cookie
//*******************************************************   
function setCookie(c_name,value,exdays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + '; path=/schedule/;' + ((exdays==null) ? "" : "");
    if(remember_params_flag) {
        c_value += " expires="+exdate.toUTCString();
    }
    document.cookie=c_name + "=" + c_value+';';
}

Cookie がすべてのブラウザーで機能するようにするために、Cookie が間違っていることは何ですか? この情報をブラウザ間で共有する必要はなく、ブラウザ セッション間でのみ共有する必要があります。

ところで、Magento と ExpressionEngine での SESSION 処理の不一致により、PHP SESSION オプションを受け入れることができません。

4

2 に答える 2

1

onbeforeunloadいくつか、イベントを使用したいと思うかもしれませんが、どこでもサポートされているわけではないので、何らかの検出を行う必要があるかもしれません。次に、どちらのイベントも発生しない(クラッシュする)方法がありますが、ユースケースではおそらくそれらについて心配する必要はないことに注意してください。あなたの方法に関しては、それは大丈夫に見えますが、あなたは決して知りません。setCookieイベントの外部でメソッドをテストして、onunloadそのまま機能することを確認してから、さまざまなブラウザーでイベントが発生するタイミングを調べ始めることができます。

Cookieの設定については、次のリンクも確認してください。

于 2013-01-24T23:21:39.757 に答える
0

私はクッキーを書いたり読んだりしているすべての場所を調べて再確認しました。ドメインを使用し、有効期限がすべて同じ値に設定されていることを確認して、すべて同じ方法で記述されていることを確認しました。

すべてが機能しているように見えます。

于 2013-02-01T16:05:34.500 に答える