Установить сессию в nodejs из стороннего сервиса 
		
		
		
		Основная задача состоит в том, что бы узнавать от какого пользователя приходят данные, возможно тот подход который я использую в данном примере не подойдёт. 
	Пытаюсь установить сессию для пользователя из одного сайта в другой, есть site1 написанный на php и site2 написанный на nodejs. C site1 я отправляю ajax запрос на url http://site2:3000/send, там устанавливается сессия. 
$.ajax({
        type: 'GET',
        url: "http://site2:3000/send",
        dataType: 'html',
        success: function (data) {
            $.ajax({
                type: 'GET',
                url: "http://site2:3000/test-send",
                dataType: 'html',
                success: function (data) {
                    alert(data);
                }
            });
        }
    });
Но как только я обращаюсь на следующий URL http://site2:3000/test-send той сессии которая ставилась для http://site2:3000/send больше нет. Код самого nodejs следующий 
router.get('/send', function(req, res, next) {
req.session.test_req = "red";
console.log(req.session.test_req); // После обращения через site1 сессия в консоли есть
res.end();});
router.get('/test-send', function(req, res, next) {
console.log(req.session.test_req);  // После обращения через site1 сессии здесь уже нет
res.end();});
Если обращаться на site2 напрямую через браузер, то сессии ставятся корректно и сохраняются. Возможно ли решить задачу таким образом, что бы создать сессию для пользователя отправив ajax запрос через другой сервис или необходимо какое-то иное решение? Я задавал подобный вопрос на stackoverflow https://ru.stackoverflow.com/questio...B8%D1%81%D0%B0 Но решение которое они предложили, мне пока не очень понятно, может быть у кого-то будут ещё решения?  | 
	
		
 Ваяс, 
	на /send подписываешь токен, отправляешь на клиента. На клиенте сохраняешь в каком-нибудь sessionStorage и ко всем последующим запросам добавляешь этот самый токен.  | 
	
		
 По-моему, сама постановка задачи не правильная. 
	"Сессия" - это сохранение какой-то составляющей состояния связи между браузером - и сервером, отдавшим именно этому браузеру страницу. В данном случае браузеру страницу отдал один сервер, а поддерживать "состояние" при следующих запросах требуется от другого сервера. Специалисты говорят о "токенах", но не понятно, как это может работать? Токен, опять же, отдаёт на страницу сервер - вместе с отдачей страницы по GET-запросу. Если эту страницу (с токеном) отдал один сервер - откуда другой сервер может знать этот токен, и был ли он там вообще? Короче, можно попробовать идентифицировать сам браузер - каждый браузер имеет уникальный номер и ещё какие-то фишки. Информацию о браузере легко отправить на любой сервер с помощью navigator в javascript-коде, отданном со страницей. Т.е. идентифицировать не сессию - а сам браузер, с которого идут запросы. Вот такая у меня чиста теоретическая идея.  | 
	
		
 Токен - это просто ещё один куки-секрет, случайно генерируемый. Он в браузере при получении страницы и значится в консоли - в разделе Cookies. 
	Как пример, стандартная "проверка на кросс-доменные атаки" (csrf) - сервер отправил токен со страницей, а потом его же проверил-идентифицировал при POST-запросе. Всё просто: он отдал - он же и проверил. И вот эта система в принципе не работает без установки модуля express-session - потому что сама "сессия" основана на куках (или токенах - что, практически, тупо одно и то же).  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Цитата: 
	
 На php.ru предложили как я думаю самое оптимальное решение, которое мне необходимо. Формируем на site1 хеш который создаём из времени + номер юзера + секретное слово. Потом отправляем время, номер и хеш в браузер посетителю. Он там это дело отправляет запросом на второй сервак. Второй сервак берёт из этого только время + номер юзера, добавляет опять свой секрет (который одинаковый на обоих сайтах, но пользователи сайта его никогда не видят). Сравниваешь хеш присланный и хеш получившийся. Если совпал - значит на обоих серваках хешировались одинаковые строки, т.е. секрет правильный использовался. А это значит, что токен настоящий. Проверяем время, чтобы с одним токеном больше пары минут нельзя было заходить. Если токен не старый - значит всё правильно.  | 
	
		
 Ваяс, 
	Ну так это и есть JSON Web Token. Считайте что ваш номер юзера - это объект с данными. И вы его подписываете секретным ключом. Не изобретайте велосипедов. Умные люди его до вас давно изобрели.  | 
	
		
 Да нормально всё. Дело не в том, что неправильно описал задачу - дело в самом слове "сессия". 
	Речь о том, что нужно "подделать сессию", т.е. сделать "какбэ сессию" из того, что ей не является. То, что вы написали, и является "подделкой сессии" - если это понятно и работает, то и хорошо: отличный опыт (и лично я, кстати, буду иметь его в виду). Спасибо за тему.  | 
| Часовой пояс GMT +3, время: 10:34. |