Сессии не работают после обновления до PHP 7 - PullRequest
0 голосов
/ 31 декабря 2018

Мой хост-провайдер обновил PHP 5.6 до PHP 7.2, и я заметил, что переменные сеанса теряются после перезагрузки страницы. Я переписал вопрос на основе текущего тестирования, чтобы предоставить соответствующую информацию.

По сути, я храню ключи поиска, количество строк на странице и другие данные в переменных сеанса, и они определяются при перенаправлении на нумерацию страниц.Однако, когда я нажимаю на любые ссылки на страницы - переменные сеанса теряют свои значения, простыми словами - когда-то сеансы pagination.php перестают работать.Перейти на страницу pagination.php можно либо нажав ссылку на категорию (href), либо введя поисковый запрос и отправив форму.

Вот соответствующие части кода, например, форма поиска надомашняя страница:

session_start();
//ini_set('session.save_path', '/tmp');
//phpinfo();
//echo "path" . session_save_path();
//if (!session_start()) echo "Session not started";
echo "header session status= " . session_status();
echo "header session_id= " . session_id();

unset($_SESSION['zip']);
unset($_SESSION['keywords']);
unset($_SESSION['key1']);
unset($_SESSION['key2']);


?>
    <div id="searchBox"> 
            <form action="<?php echo $forsaleurl;?>customer/pagination.php" method="post" class="searchform">

                    <input name="searchstring" class="textbox" type="text" placeholder="search string" value="" required/>
                    <input name="postcode" class="textbox" type="text" placeholder="postcode (optional)" value=""/>
                    <input name="submit" class="submit" value="Search" type="submit" />

    </form>

            </div>

Когда сайт загружен, session_status = 2 и session_id имеет значение.

Это начало pagination.php, который создает и отображает ссылки на страницы:

<?php

include '../config.php';
if ($DEBUG > 0)
           {
error_reporting(E_ALL); ini_set('display_errors', 'On'); 
}

echo "page session status= " . session_status();
echo "page session_id" . session_id();

Это будет отображать session_status = 1 и пустое значение session_id, как только вы попадете сюда.

Это первая часть config.php, которая начинает сеанс:

<?php

ob_start();
error_reporting(E_ERROR); ini_set('display_errors', 'On');
//ini_set('session.save_path', '/tmp');
//phpinfo();
echo "path" . session_save_path();

if (!session_id()) session_start();
print_r($_SESSION);

//session_start();
echo session_status();
echo "session_id" . session_id();

Это покажет переменные session_status, session_id и сеанса при загрузке сайта, но не после того, как вы перейдете к нумерации страниц.

Я пытался использовать относительный URL-адрес в действии формы, но это не помогло.

Файлы сессий содержат либо перенаправления на / или на index.php, либо на ссылки, которые я НЕ посещал (???).

URL сайта: https://themarket.onl.

Имееткто-нибудь сталкивался с этой проблемой послеupgrade? До этого сайт полностью работал, и в код не было внесено никаких изменений.

Вот частичный дамп phpinfo (), не уверенный, что session.save_path не должен быть пустым,но, похоже, работает, и локальный php.ini не может изменить значение.

Session Support enabled
Registered save handlers    files user
Registered serializer handlers  php_serialize php php_binary wddx
Directive   Local Value Master Value
session.auto_start  Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly no value    no value
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.lazy_write  On  On
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   no value    no value
session.serialize_handler   php php
session.sid_bits_per_character  4   4
session.sid_length  32  32
session.upload_progress.cleanup On  On
session.upload_progress.enabled On  On
session.upload_progress.freq    1%  1%
session.upload_progress.min_freq    1   1
session.upload_progress.name    PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix  upload_progress_    upload_progress_
session.use_cookies 1   1
session.use_only_cookies    1   1
session.use_strict_mode 0   0
session.use_trans_sid   0   0

/ tmp имеет права drwxr-xr-x.

1 Ответ

0 голосов
/ 19 июля 2019

Чтобы использовать сеансы на основе файлов cookie, необходимо вызывать session_start () перед выводом чего-либо в браузер, включая любой HTML.Даже используя отчеты об ошибках, как вы здесь;или НИЧЕГО, что отображается в браузере;да даже echo 'Hi';или пустое место;или спецификация перед <?php требует отправки заголовков (для отображения этого сообщения или пустого).Заголовки могут быть отправлены только в браузер ОДНАЖДЫ, поэтому session_start() не может сделать свое дело.(Этот ответ любезно предоставлен моим пустым сообщением об ошибках на экране смерти за последний день.)

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