我们有一个使用ExpressionEngine作为CMS的网站。我们还在我们网站的电子商务部分使用Magento的购物车。我在使用cookie方面遇到困难,并且可以在不同的区域访问它们。
我们使用cookie进行搜索选择,以便当用户返回我们的日程安排页面时 记住他们保存的最后一个选择,最多2天前。
我还允许他们使用网址使用下面评论中显示的网址进行设置。 Cookie用于根据最后或最后两个细分来过滤计划中的项目。
//*****************************************************************************
// 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+';';
}
就饼干而言,我做错了什么才能让它们在所有浏览器中运行?他们不必在浏览器之间共享此信息,只需浏览器会话。
BTW,由于Magento和ExpressionEngine中SESSION处理之间的不一致,我无法接受PHP SESSION选项。
答案 0 :(得分:1)
有些事情,我想您可能想要使用onbeforeunload
event,但它是not supported everywhere,因此您可能需要进行一些检测。其次,请注意,有些方法不会触发任何事件(崩溃),但您可能不需要为您的用例担心它们。至于你的方法,它看起来不错,但你永远不知道。我确定会在setCookie
事件之外测试onunload
方法以确保它按原样运行,然后您可以开始查看事件何时在不同浏览器中触发。
查看这些链接以了解有关设置Cookie的信息:
答案 1 :(得分:0)
我仔细检查了所有我正在写的地方并阅读了这些饼干。我确保它们都以相同的方式编写,使用域并确保过期都设置为相同的值。
现在看来它现在都在运作。