Может ли кто-нибудь сказать мне, почему сеанс 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 ()