Откуда исходит cookie "_shopify_country"? - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу перенаправить в магазин, связанный со страной, из которой пользователь просматривает на моем сайте shopify, на основе Slate .

Во время моего исследования я обнаружил файл cookie с именем _shopify_country, значение которого соответствует стране пользователя, но я боюсь использовать этот файл cookie, поскольку он недокументирован .

У меня есть два вопроса:

  1. Где этот набор _shopify_country установлен?
  2. Как я могу перенаправить на сайт, связанный с этим cookie, используя javascript?Должен ли я опросить куки, пока они не будут установлены?

1 Ответ

0 голосов
/ 06 апреля 2019

Я немного посмотрел несколько сайтов Shopify и не могу найти файл cookie _shopify_country.Кажется, никогда не устанавливается, поэтому я предполагаю, что это пользовательская модификация для извлечения или, возможно, устаревшая функция.

Но если ваша цель - определить, из какой страны пользователь, вы можете просто отправить запрос AJAX вGEOIP сервис.API, который я обычно использую для поиска GEO: https://www.geojs.io, это бесплатный поиск GEO без аутентификации,

Обычно вы будете показывать баннер, предлагающий перейти на локальный сайт, а не перенаправлять себя.,Для случаев, когда у них есть VPN / они покупают для кого-то за границей

Так как запросы AJAX запускаются от клиента, он вернет его IP / информацию из примера, который вы можете попробовать в своей консоли.

Fetch IP

fetch('https://canihazip.com/s')
    .then(response => response.text())
    .then(body => alert(body))

Получить код страны

fetch('https://get.geojs.io/v1/ip/country')
    .then(response => response.text())
    .then(body => alert(body))

Но вернемся к вопросу, если вы хотите перенаправить на основе кода страны, вы могли бы сделать что-то вроде этого

fetch('https://get.geojs.io/v1/ip/country')
    .then(response => response.text())
    .then(country_code => {
        // Save as a cookie in case we want to use it later / in another page
        var date = new Date(); date.setMonth(date.getMonth()+1); date = date.toUTCString();
        document.cookie = `_visitor_country=${country_code}; expires=${date}; path=/`;

        var domain_and_tld = window.location.host.split('.').splice(-2).join('.');
        country_code = country_code.trim().toLowerCase();

        switch (country_code) {
            case 'gb':
                window.location.host = domain_and_tld;
                break;
            case 'us':
                window.location.host = `us.${domain_and_tld}`;
                break;
            case 'fr':
                window.location.host = `fr.${domain_and_tld}`;
                break;
        };
    })
    .catch(err => console.error(err));

Приведенный выше код, нокак ES5 / с поддержкой старых браузеров

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://get.geojs.io/v1/ip/country');
xhr.send();
xhr.onload = function() {
    if (xhr.status != 200)
        return console.error('Error '+xhr.status+': '+xhr.statusText);

    var country_code = xhr.response.trim().toLowerCase();

    // Save as a cookie, so we can reference this later if we want to
    var date = new Date(); date.setMonth(date.getMonth()+1); date = date.toUTCString();
    document.cookie = '_visitor_country='+country_code+'; expires='+date+'; path=/';

    var domain_and_tld = window.location.host.split('.').splice(-2).join('.');
    switch (country_code) {
        case 'gb':
            window.location.host = domain_and_tld;
            break;
        case 'us':
            window.location.host = 'us.'+domain_and_tld;
            break;
        case 'fr':
            window.location.host = 'fr.'+domain_and_tld;
            break;
    }
};

xhr.onerror = function() {
    console.error('Request failed');
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...