PHP Переменные сеанса, установленные через AJAX, не сохраняются - PullRequest
0 голосов
/ 09 февраля 2020

Я знаю, что этот вопрос часто задавался на этой и других платформах. И поверьте мне, я прочитал их все и не решил мою проблему. Я пытаюсь установить некоторые переменные сеанса от 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?

Есть предложения? Спасибо за чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...