Я знаю, что этот вопрос часто задавался на этой и других платформах. И поверьте мне, я прочитал их все и не решил мою проблему. Я пытаюсь установить некоторые переменные сеанса от AJAX вызова до PHP, когда документ готов.
Подробнее:
На каждом php На странице моего веб-сайта я звоню session_start();
в верхней части страницы (первая строка), после выполнения некоторых базовых c проверок, которые я использую session_regenerate_id();
среди усилий по предотвращению перехвата сеанса. Я сохраняю количество раз, когда пользователь делал запрос к странице, как $_SESSION['Requests']
, поэтому, когда пользователь сделал первый запрос к сайту, переменная $_SESSION['Requests']
не установлена, и в этом случае я знаю, что это первый время, когда пользователь заходит на сайт, поэтому я отправляю клиенту скрипт, который собирает некоторые данные браузера со страницей. Код:
Любой файл PHP:
session_start();
.....
session_regenerate_id();
.....
$script = '';
if (!isset($_SESSION['Requests'])) { // this is the first time of the user visiting the site
$_SESSION['Requests'] = 1;
$script = '<script type="text\javascript">
$(document).ready(function() {
$.ajax
({
url: "/p_handler",
type: "POST",
data: { some browser info },
success: function (output) {
alert(output);
}
});
});
</script>';
} else if (!isset($_SESSION['AjaxVar1']) || !isset($_SESSION['AjaxVar2'])) {
echo 'error'; exit;
}
Переменная $script
выводится в документ HTML.
p_handler. php:
Этот файл обрабатывает вызов AJAX и устанавливает сеанс. Я не использую session_regenerate_id();
в этом файле.
session_start();
if (isset($_POST['vars from ajax'])) {
$_SESSION['AjaxVar1'] = $_POST['AjaxVar1'];
$_SESSION['AjaxVar2'] = $_POST['AjaxVar2'];
$_SESSION['Requests']++;
echo 'Here'.$_SESSION['AjaxVar1']; exit;
}
Когда я загружаю страницу в браузер в первый раз, я вижу, что здесь отображается предупреждение о значении переменной $_SESSION['AjaxVar1']
- Что делает меня уверенным, что вызов AJAX сделан правильно, без каких-либо проблем, переменные размещены и переменные сеанса установлены успешно. Но когда я перенаправляю на другую страницу сразу после первой страницы, вывод «ошибка» - означает переменные сеанса, установленные через AJAX потерян. Но ПОЧЕМУ ???
Я прочитал все вопросы, касающиеся этой проблемы, и нашел ответы типа: «Звоните session_start();
на каждой странице в первой строке», и я делаю это, и это не решает проблема, я также пытался session_start([session_id()]);
и ничего.
Правильно ли, что невозможно установить значения сеанса из AJAX?
Есть предложения? Спасибо за чтение.