2017-02-03 5 views
1

Я запускаю свой сервер по адресу http://localhost:8080 и пытаюсь выполнить запрос с сервера ajax по адресу http://192.168.1.2/. Мне нужно сделать что-то, чтобы отправить команду set cookie для хранения файлов cookie на сервере 192.168.1.2 и получить информацию с ajax от него на сервере localhost.Как сохранить сеанс на удаленном сервере с помощью ajax-запроса javascript/PHP

Поэтому код с яваскриптом запросом AJAX:

let query = this.http.get('http://192.168.1.2/testdb.php'); 

query.toPromise().then((result) => { 
    console.log(result); 
    console.log(result.json()); 
}); 

Я запрашивая сервер 192.168.1.2, чтобы получить от него информации с хранением информации в сессии на нем в то время как скрипт работает.

На сервере я пытаюсь что-то сделать и хранить информацию в переменной сеанса. Но я не могу, потому что каждый раз, когда я отправляю новый запрос на 192.168.1.2 с моего локального хоста, мой сервер (192.168.1.2) каждый раз устанавливает новый сеанс. Если я не ошибаюсь, мне нужно установить cookie правильно, чтобы сохранить сеанс на удаленном сервере.

Мой код на PHP сервер (192.168.1.2) является:

session_start(); 
    header('Access-Control-Allow-Origin: *');    
    header('Access-Control-Allow-Headers: *');  

    echo "<pre>"; 
    var_dump(headers_list());  
    echo "</pre>";   


    echo json_encode(array('success' => true, 'session_id' => session_id())); 

Я получил новый идентификатор сессии каждый раз, когда я запрашиваю. Для хранения сеанса мне нужно, чтобы id всегда был. Итак, как это сделать, чтобы хранить информацию о сеансе на удаленном сервере? P.S. Извините за мой плохой английский, мне трудно объяснить.

ответ

2

Это не возможно, чтобы сеанс через AJAX вызова, поскольку он создает новый запрос на HTTP каждый раз.

Решение SOLUTION - это идентификатор магазина на стороне клиента и каждый раз отправляет идентификатор с запросом на удаленный сервер. На удаленном сервере создайте новый сеанс со старым идентификатором. https://404it.no/en/blog/javascript_cross-domain_request_with_session

0

переменная _SESSION похожа на файл cookie. В вашей ситуации вы должны сохранить идентификатор в сеансе вместе с идентификатором пользователя, который отправляет идентификатор пользователя на ваш сервер. Сервер будет извлекать идентификатор пользователя и возвращать идентификатор. Что-то вроде:

<?php 
function getInfo(){ 
    $id = $_GET['userId']; 
    //some id validations; 
    $sessionData = $_SESSION[$id]; 
    echo json_encode($sessionData); 
} 

function setInfo(){ 
    $id = generateuserid(); 
    //some id validation 
    $sessionData = array('id' => session_id(), 'data' => 'data'); // the data you need to store; 
    $_SESSION[$id] = $sessionData; 
    echo json_encode(array('userId' => $id)); 
} 

?> 

А затем для вашего Javascript вы передаете переменную в URL

let query = this.http.get(http://192.168.1.2/testdb.php?userId=someid); 

query.toPromise().then((result)=>{ 
    console.log(result); 
    console.log(result.json()); 
}); 

надеюсь, что это помогает!

  • Nic
+0

Я знаю это решение, но хочу сохранить его в автоматическом режиме по любому запросу без id. Может быть, я могу как-то использовать session_set_cookie_params? –

+0

@AlexanderZakusilo Эти методы обычно устанавливают параметры файлов cookie, такие как время их жизни или уровень безопасности, вы можете попробовать. В вашем коде вы вставляете новую переменную сеанса каждый раз, когда вы совершаете вызов, поэтому каждый раз вы имеете разные идентификаторы. – Nicolas