Общий сеанс через домены
Хорошо... У меня есть два домена example.com и example.net, они имеют одинаковое кодовое пространство и сеансы. Проблема в том, что домен должен меняться, когда пользователь меняет язык, когда это происходит, все данные сеанса теряются. Я хочу сделать ajax-вызов прямо перед этим, чтобы я мог изменить сеанс. Вот код, который используется для инициализации сеанса.
<?php
/* This method is invoked */
public function start($session_id = '', $key = 'default') {
if (!session_id()) {
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
if ($session_id) {
session_id($session_id);
}
if (isset($_COOKIE[session_name()]) && !preg_match('/^[a-zA-Z0-9,\-]{22,52}$/', $_COOKIE[session_name()])) {
exit('Error: Invalid session ID!');
}
session_set_cookie_params(0, '/');
session_start();
}
if (!isset($_SESSION[$key])) {
$_SESSION[$key] = array();
}
$this->data =& $_SESSION[$key];
return true;
}
Я попытался создать автономный скрипт для обработки вызова ajax, но он не сработал.
<?php
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
session_set_cookie_params(0, '/');
session_start();
session_id($_POST['session_id']);
header('Content-Type: application/json');
$data = array('session_id' => session_id());
echo json_encode($data);
Сеанс не сохраняется при переключении между двумя доменами. Есть какие-нибудь подсказки?
1 ответ
Это функция безопасности веб-браузеров - сеанс использует куки-файл, который прикреплен к домену, и браузер не будет отправлять этот куки-файл в другой домен.
Контролируя оба домена, вы можете достичь этого, включив информацию об аутентификации в URL. Это сложная тема. Вы можете сделать что-то домашнее, что сработает, но если вы не знакомы с проблемами безопасности, вам лучше использовать готовое решение с единым входом.