2013-01-24 41 views
0

我们有一个使用ExpressionEngine作为CMS的网站。我们还在我们网站的电子商务部分使用Magento的购物车。我在使用饼干方面遇到困难,并在不同的地区使它们可以使用。PHP和Javascript 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来设置cookie在window.onUnload 来设置他们的搜索首选项的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+';'; 
} 

我在做什么错,只要饼干为了让他们在所有浏览器的工作去了?他们不必在浏览器和浏览器会话之间共享此信息。

顺便说一下,由于Magento中的SESSION处理与ExpressionEngine之间的不一致,我无法接受PHP SESSION选项。

回答

0

我经历了和双重检查所有的地方,我在写和读的cookie。我确信他们都是以同样的方式写成的,使用域名并确保所有期限都设置为相同的值。

一切都看起来像现在正在工作。

1

有几件事,我想你可能要使用onbeforeunload event,但它是not supported everywhere,所以你可能需要做一些检测。其次,请注意,有些方法都不会触发事件(崩溃),但您可能不需要担心它们的用例。至于你的方法,它看起来不错,但你永远不知道。我一定会在onunload事件之外测试setCookie方法,以确保它按原样运行,然后您可以开始查看事件何时在不同浏览器中触发。

查阅这些链接,以及对信息上设置Cookie: