0

我们有一个使用 ExpressionEngine 作为 CMS 的站点。我们还在我们网站的电子商务部分使用 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}

现在,在日程安排页面上,我有一些 javascript 来设置 window.onUnload 中的 cookie,以便为他们的搜索首选项设置 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 而言,为了让它们在所有浏览器上工作,我做错了什么?他们不必在浏览器之间共享此信息,只需浏览器会话即可。

顺便说一句,由于 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 回答