Идентификатор сеанса потерян (ajax + PHP) - PullRequest
0 голосов
/ 30 марта 2020

У меня проблема с AJAX + PHP идентификатором сеанса, когда новый идентификатор генерируется скриптом, полученным через GET. Я создал 2 тестовых сценария, которые раскрывают проблему:

сценарий 1 (закомментировал AJAX, но и XMLHttpRequest, и $ .get () дают одинаковый результат):

<?php
    session_start();
    ob_start();
    echo('test: '.session_id());

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="test"></div>
    <script type='text/javascript' src='../node_modules/jquery/dist/jquery.js?<?echo($time)?>'></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var xhr = new XMLHttpRequest()
            xhr.onreadystatechange = function () {
                if(xhr.readyState === 4 && xhr.status === 200) {
                    document.getElementById('test').innerHTML=this.responseText;
                    resolve('page loaded');
                }
            }
            xhr.open("GET",'http://10.1.1.101/testLinks/test2.php');
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send();
            // $.get('test2.php').done(function(val) {
            //     document.getElementById('test').innerHTML=val;
            // })
        });
    </script>
</body>
</html>

Сценарий 2:

<?php
    session_start();
    ob_start();
    echo('test2: '.session_id());
?>

Вывод:

test: 4occu9mq6o3c16au254grf0s56
test2: 6bk1fdbs3v2bcl9iko31s5nqp4

Глядя на другие темы, я проверил настройку php для включенных файлов cookie, а также время жизни:

php информация о сеансе

Я подтвердил, что при I include 'test2.php'; новый идентификатор сеанса не генерируется. Только при использовании AJAX.

Я не уверен, что еще посмотреть здесь. Любые предложения приветствуются.

РЕДАКТИРОВАТЬ: для ясности, я использую JQuery 3.4.0, однако, после переключения на XMLHttpRequest, я не верю, что это ошибка JQuery, и имеет больше дел с некоторой конфигурацией PHP, но я не уверен, что.

1 Ответ

0 голосов
/ 02 апреля 2020

Мы выяснили проблему. Сервер, на котором мы это развернули, выполнял приложение через http (порт 80). Мы сгенерировали сертификат SSL и переключились на HTTPS (порт 443), и куки-файлы смогли хранить PHPSESSID без регенерации. Однако это может быть связано с некоторыми параметрами безопасности в организации, но, надеюсь, это поможет кому-то, имеющему ту же проблему.

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