Я по существу пытаюсь создать систему входа, которая вернет пользователя на страницу, на которой они были. Я знаю, что этот вопрос задан немного, и я посмотрел на другие ответы на SO, но я не могу найти решение моей конкретной проблемы.
На моем сайте есть таблица с номерами идентификационных номеров (например: 10001, 10003, 10004, … 53401 и т. Д.). Эти числа также являются связями. Все ссылки указывают на одну страницу («mypage.php»), а ссылочный номер идентификатора (10004) становится строкой запроса к этому URL:
<td><?php echo '<a href="mypage.php?query_ecr=', urlencode($num), '">'; ?><?php echo $num; ?></a></td>
На моем «header.php», который находится на каждой странице сайта, есть кнопка в меню, которая откроет форму ниже для входа пользователя в систему.
<form action='login/process.php' method='post'> <label for='name'>Username:</label> <input type='text' id='userid' name='user_name'/> <label for='password'>Password:</label> <input type='password' name='password' id='userpassword'/> <input type='submit' value='Log In' /> <input type='hidden' name='login' value='1'> <input type='hidden' value='".$_SERVER['PHP_SELF']."' name='redirurl'/> </form>
Обратите внимание на «скрытый ввод» с именем = «redirurl». Я хочу захватить текущую страницу, на которой пользователь включен. У меня уже есть сценарий входа в систему, который проверяет имя пользователя и пароль и перенаправляет их на нужную им страницу.
//login/process.php ...blah blah blah other stuff... global $database,$session; $this->user_status=$database->CheckUserPass($_POST['user_name'],$_POST['password']); $url = $_POST['redirurl']; if($this->user_status==1) { $session->StartSession($_POST['user_name'],$_POST['password']); header("Location: ".$url); } else { ...blah blah blah..... }
Моя проблема в том, что если GUEST нажимает на ссылку (например: 10004), они берутся на URL:
http://www.XXXXXX.XXXX/mypage.php?query_ecr='10004'
Однако на этой странице значение «redirurl»:
http://www.XXXXXX.XXXX/mypage.php
Он игнорирует строку запроса. Поэтому, когда пользователь входит в систему с этой страницы, и мой сценарий входа повторно перенаправляет их обратно на эту страницу, на странице много ошибок, потому что для нее нужна строка запроса.
Как включить строку запроса в: $ _SERVER ['PHP_SELF']?
Вы можете использовать:
$_SERVER['REQUEST_URI']
получить все после имен доменных имен, строк запросов и т. д. Затем вы можете использовать другие переменные $ _SERVER для добавления домена, или это должно быть хорошо использовать без имени домена, если вы не меняете хосты.
Как насчет:
echo $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
Обратите внимание, что вы, вероятно, захотите дезинфицировать этот вывод следующим образом:
$url = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; echo htmlspecialchars($url, ENT_QUOTES, 'utf-8');
для защиты от XSS.
Строка запроса доступна в $_SERVER['QUERY_STRING']
. Просто соедините их (не забывайте вопросительный знак), и все будет в порядке. 🙂