Intereting Posts
Как вывести более 255 символов в ячейке Excel с помощью Spreadsheet_Excel_Writer () в php? Как указать SMTP-сервер для электронной почты в PHP? PHP shell_exec, разрешение отклонено для выполнения скрипта оболочки -rwxrwxrwx Как я могу использовать процессор и память? php file_get_contents () показывает страницу вместо html-исходного кода Как разрешить ошибку cURL 60: сертификат SSL в Laravel 5 при аутентификации Facebook Совместимость с PHP preg_match в Python Как получить запись во время цикла DOMDocument / Xpath утечка памяти при длительном процессе командной строки – любой способ деконструировать этот класс Возвращение заголовка в виде массива с помощью Curl Twig для цикла и массива с ключом Строка поиска по точному слову в Mysql Несколько слоев обслуживания и транзакции базы данных Почему я должен использовать __get () и __set () – магические методы в php? Инкапсулировать все приложение в транзакции базы данных

Переменные сеанса не сохраняются между загрузками страниц

Может ли кто-нибудь сказать мне, почему сеанс vars не проходит между страницами? Они работали до 2 дней назад. Теперь его нет? Существует сторонняя система, которая регистрирует пользователей на основе сторонней системы. Я направляю пользователей на страницу входа с обратным адресом. Сторонняя система регистрирует пользователя и передает свой идентификатор и токен, сгенерированный на их конце, и возвращает их на мой сайт с идентификатором и токеном в URL-адресе.

Если сеансы не установлены, я пытаюсь захватить идентификатор и токен из URL-адреса и установить сеансы. (рабочий) Затем я создаю свой собственный токен для проверки против токена, переданного из сторонней системы (работая), когда я перехожу к клику на другую страницу, установленные мной сеансы не пусты (????)

Вот мой код:

<?php session_start(); // FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME // BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } // DESTROY SESSION INFO IF TIMED OUT if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { session_destroy(); // destroy session data in storage session_unset(); // unset $_SESSION variable for the runtime } // SET THE SESSIONS WITH INFO PASSED FROM // LOGIN PAGE SENT AS A GET if(isset($_SESSION['ID']) && isset($_SESSION['token'])) {}else{ $_SESSION['ID'] = $_GET['ID']; $_SESSION['token'] = $_GET['token']; } // GENERATE MY TOKEN TO MATCH THE LOGIN SYSTEM TOKEN $userIP = $_SERVER['REMOTE_ADDR']; $secretkey = 'A Unique Key For The Logged In User Matching the Login System Passed From mydomain.com/login.php'; $algorithm = 'md5'; $mm = date('m'); $dd = date('d'); $mmdd = $mm.$dd; $mytoken = strtoupper(hash($algorithm, $secretkey.$_SESSION['ID'].$userIP.$mmdd)); $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp // THIS IS WHERE THINGS ARE GOING WRONG // SESSION token IS NO LONG SET AFTER I Go To another page // and my token isnt the same any more either because session ID // is no longer set??? if($_SESSION['token']==$mytoken){}else{ header("location: https://mydomain.com/login.php?returnURL=".curPageURL()); } ?> 

хорошо, это испортилось. Это должно быть проблемой для хостинг-провайдеров PHP-установки, я думаю, потому что я создал две страницы. одна называется информацией с этим кодом:

 <? session_start(); $_SESSION['ID'] = "112233"; $_SESSION['token'] = "mytoken"; print $_SESSION['ID']; print $_SESSION['token']; ?> <a href="info2.php">info 2</a> 

и один называется info2 с этим кодом:

 <? session_start(); print $_SESSION['ID']; print $_SESSION['token']; ?> <a href="info.php">info</a> 

info создал и распечатал сеанс ok. когда я нажимаю ссылку, чтобы перейти к информации2, сеансы не печатаются. Это проблема с настройкой хостинга?

Как уже упоминалось, убедитесь, что вы вызываете session_start() на каждой странице.

Кроме того, являются ли скрипты на разных поддоменах? Если это так, вы должны установить значение INI session.cookie_domain в .DOMAIN.EXT .

Чтобы еще больше отладить всю эту ситуацию, сделайте несколько простых просмотр файлов cookie. Посмотрите, присутствует ли PHPSESSID в качестве файла cookie на обоих запросах страниц, если это не так, это ваша проблема. Вы не можете хранить файлы cookie через домен, если вы их не восстановите.


В ответ на ваше обновление попробуйте сделать это под своим вызовом session_start() :

 echo session_id(); 

Убедитесь, что на обеих страницах одинаково. Если нет, проверьте значение session.cookie_domain следующим образом:

 echo ini_get('session.cookie_domain'); 

Это что-то настроено? По умолчанию он должен быть пустым, если он установлен, особенно не для вашего домена, это проблема.

Вы также можете попробовать отладить значение cookie для PHPSESSID как я сначала предложил.

Контрольный список
1. Убедитесь, что вы использовали session_start (); на следующей странице.

2. Используете ли вы файл .htaccess?
если так удалить файл .htaccess и проверить его.
некоторые правила перезаписи времени вызывают проблемы сеанса …

3. Если сеанс работает нормально, и у вас есть проблемы только с токеном, тогда проверьте маркер, отправленный в url, url_encoded.

это не проблема сервера хостинга …

проверьте свои URL-адреса

если пользователь входит в систему под «example.com», сеанс будет храниться для «example.com», а не «WWW.example.com», поэтому, если ссылка идет на http://www.example.com, у нее не будет этого сеанса.

вы можете использовать htaccess, чтобы всегда устанавливать URL-адрес на «WWW.example.com», используя ниже код для него

RewriteEngine On

RewriteCond% {HTTP_HOST} ^ hemantjadhav.com $ [NC]

RewriteRule ^ (. *) $ http://www.hemantjadhav.com/ $ 1 [L, R = 301]

(замените hemantjadhav своим доменным именем)

Ответ на этот вопрос – ошибка конфигурации хостинга. Хостинговая компания что-то изменила, и с тех пор она работает.

Убедитесь, что обе страницы находятся в одном домене. Даже сайт http://www.site.com отличается от site.com

Проверьте размер файла сеанса: (код, взятый из этого сообщения )

 $sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id(); echo 'session file: ', $sessionfile, ' '; echo 'size: ', filesize($sessionfile), "\n"; 

Если ваш файл сеанса имеет нулевой размер, убедитесь, что на вашем сервере все еще есть свободное место на диске. Это была проблема, которую я имел.

Проверьте дисковое пространство с помощью df -h на сервере linux.

Вы не вызывали session_write_close ()