2015-01-13 1 views
1

Мне пришло в голову, что, когда предметы помещаются в нашу корзину с помощью safari/ios, они не отображаются. Печенье корзины не устанавливается. Он задается на странице переадресации. Я видел проблему сафари, не устанавливающую cookie и перенаправление, но если я выберу перенаправление, он все равно не будет установлен. Вот код:Cookie не устанавливается в Safari, ios, но работает в ie, ff, chrome

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> 
 
<script type="text/javascript">window.onload= function() { 
 
SetCookie('RORDERID','OECLICK*17180*39521',10); 
 
setTimeout("redir()",100);} 
 
function redir(){window.location = 'http://www.shopthethirdfloor.com/forward-to-ttf-cart.html';} 
 
function SetCookie(cookieName,cookieValue,nDays) {var today = new Date();var expire = new Date(); 
 
expire.setTime(today.getTime() + 3600000*24*nDays); 
 
document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();}</script> 
 
</head> 
 
<body><br>If you are not redirected to the shopping cart, <a href="http://www.THESITE.com/forward-to-ttf-cart.html">click here</a></body></html>

Я думал, что, может быть, SetTimeout позволит ему работать, но если я вынимаю вызов REDIR() он по-прежнему не устанавливает куки.

Любые предложения?

Дополнительные примечания: Я нашел объявление об этом, и обновил код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> 
 
<script type="text/javascript">window.onload= function() { 
 
setCookie2('RORDERID','OECLICK*17180*43',10,'','',''); 
 
//setTimeout("redir()",100); 
 
} 
 
function redir(){window.location = 'http://www.shopthethirdfloor.com/forward-to-ttf-cart.html';} 
 
function setCookie2 (name, value, nDays, path, domain, secure) {var today = new Date();var expires = new Date(); 
 
    expires.setTime(today.getTime() + 3600000*24*nDays); 
 
    var curCookie = name + "=" + encodeURIComponent(value) + (expires ? "; expires=" + expires.toGMTString() : "") + (path ? "; path=" + path : "") + (domain ? "; domain=" + domain : "") + (secure ? "secure" : ""); 
 
    document.cookie = curCookie;}</script> 
 
</head> 
 
<body><br>If you are not redirected to the shopping cart, <a href="http://www.thesitename.com/forward-to-ttf-cart.html">click here</a></body></html>

и она работает, но до сих пор не работает на моем сайте. Этот код запускается в iframe из другого домена на моем сайте. Сайт www.shopthethirdfloor.com. Если вы перейдете к продуктам, выберите продукт и добавьте его в корзину, он не добавит cookie на сафари, а другие браузеры.

ответ

1

ОК, после многократного копания, проб и ошибок, это была проблема, когда сафари не установило cookie в перекрестном домене iframe. Я попробовал несколько предложений в Интернете, включая здесь, но они либо не были релевантными, либо не работали (были старыми). Я обнаружил, что у меня было 2 варианта. Во-первых, измените оснащенный домен как поддомен домена родительского окна, который я мог бы сделать, но мне нужно было бы изменить промежуточные ссылки и платежный шлюз, которые я не хотел делать. Во-вторых, сделано несколько шагов, но отлично работает: Страница, которая пытается установить cookie, проверяет, является ли это браузером сафари, и если это так, изменяет расположение окна на php-скрипт из того же домена, что и браузер, передающий cookie в переменной get, это, в свою очередь, изменяет расположение окна на asp-скрипт с сервера iframe, отправляя ему информацию cookie, которая имеет код настройки файла cookie и после установки файла cookie загружает страницу для корзины покупок , Ключом здесь является получение страницы настроек файла cookie, которая должна установить cookie в родительское окно, а затем загрузить новую страницу назначения.

Это несколько шагов, но хорошо работает.

1

пытается использовать локальную концепцию хранения HTML5 для достижения хранения куки в браузере сафари

настройка сафари по умолчанию будет Cookies позволяет для доверенных сайтов, так что вы должны включить настройки для включения хранения печенья ... Чтобы преодолеть эту проблему вы можете использовать концепцию хранилища HTML5