2016-07-25 3 views
0

Я пытаюсь получить переменные сеанса с одного сайта на другой. Веб-сайт с переменными - это магазин, другой - обычный веб-сайт.Использование sessiondata на другом сайте

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

Мой план состоял в том, чтобы достичь этого с помощью эхо-объекта json на пустой странице и использовать jQuery.get на другом веб-сайте, чтобы получить переменные. На странице в магазине (transferdata.php) отображается правильный объект, то есть

{"logged":1,"cart":9}.
Однако страница, которая извлекает эти данные (getdata.php) получает

{"logged":0,"cart":0}.

Код для transferdata.php (файл в shopwebsite)

# Check login status 
if ($ca->isLoggedIn()) { 
    $transferdata['logged'] = 1; 
} else { 
    $transferdata['logged'] = 0; 
} 

# Get amount of items in a cart 
$transferdata['cart'] = count ($_SESSION['cart']['products']) + count ($_SESSION['cart']['addons']) + count ($_SESSION['cart']['domains']); 

# Display transferdata 
echo json_encode($transferdata); 

Код для getdata.php (файл в обычном веб-сайте)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
<script> 
$.get("https://**.*******.nl/transferdata.php", function(data) { 
    $(".result").html(data); 
    alert("Load was performed."); 
}); 
</script> 

<div class="result"></div> 

Магазин расположенный в папке обычного веб-сайта (магазин находится на субдомене). Я пытаюсь использовать навигацию на обычном веб-сайте магазина, чтобы пользователи могли легко перейти в магазин с обычного веб-сайта. Мне нужно, чтобы «зарегистрировался», чтобы узнать, нужно ли показывать обычную навигацию или версию для зарегистрированных пользователей, и мне нужно, чтобы номер корзины отображался в «Корзина (0)» в навигации

Может ли кто-нибудь помочь мне исправить это? Если лучший ответ не является json-объектом, я открыт для предложений.

+0

Давайте посмотрим код. – buster

+0

Код добавлен. Извините за то, что вы не включили его в исходное сообщение. –

ответ

0

Используйте базу данных или другое хранилище данных общего доступа. Если вы отправляете данные сеанса через передний конец, пользователь может управлять им (например, "logged":1, когда пользователь не выполнил вход в систему, или "cart":9 для проверки чужой тележки).

1

Предполагая, что эти два объекта физически разделены, это невозможно по определению. Если бы вы могли запросить данные сеанса таким образом, это было бы серьезным риском для безопасности.

Чтобы определить статус входа в систему другого сайта, выполните соответствующую технику, например Single Sign-on.

+0

Магазин находится в папке обычного веб-сайта (магазин находится на субдомене).Я пытаюсь использовать навигацию на обычном веб-сайте магазина, чтобы пользователи могли легко перейти в магазин с обычного веб-сайта. Мне нужно «войти в систему», чтобы узнать, нужно ли мне показывать обычную навигацию или версию для зарегистрированных пользователей, и мне нужно, чтобы в таблице «Корзина (0)» отображался значок «Корзина (0)». –

+0

Пока 2 приложения не делят идентификатор сеанса и хранилище, сеансы разделяются. Только одно приложение может в любое время получить доступ к сеансу (поскольку сеанс будет заблокирован во время доступа), поэтому ему потребуется совместное программирование. Я бы предложил общую базу данных для тележки и технику единого входа для входа –

0

Предполагается, что сеансы должны иметь идентификацию по их идентификатору URI.

Попытки сделать какую-либо манипуляцию с таким же через клиент приведет к уязвимости в частности, печально: Session_fixation

Решение состоит в том, чтобы использовать запрос перекрестного происхождения через безопасный вызов API для 2-го ресурса после аутентификации либо от самого клиента или сервера. На этом основаны такие понятия, как единый/социальный вход.

Смежные вопросы