Я хочу, чтобы моя страница php была доступна только из другой страницы и не позволяла моему пользователю напрямую обращаться к ней.
Я имею в виду, допустим, у меня есть страница под названием «main.php» и другой php-файл, который я хочу предотвратить прямому доступу, называемый «noaccess.php».
Я хочу сделать noaccess.php доступным только в том случае, если я перенаправляюсь из main.php
Какие-либо предложения?
UPDATE: Сессия – хорошая идея, но проблема в том, что я должен использовать JavaScript для перенаправления страницы, поэтому вопрос в том, могу ли я использовать ajax для установки сеанса php?
ОБНОВЛЕНИЕ 2: ОК. Я нашел решение, мне не нужно препятствовать прямому доступу сейчас, так как я могу проверить из mysql, должна ли страница быть доступной или нет.
Что делать, если каждый раз, когда вы собираетесь перенаправить, вы сохранили значение в переменной $ _SESSION. Так что у тебя есть
//code $_SESSION['fromMain'] = "true"; header("Location: noaccess.php");
Затем в noaccess.php put
if($_SESSION['fromMain'] == "false"){ //send them back header("Location: foo.php"); } else{ //reset the variable $_SESSION['fromMain'] = "false"; }
Я действительно не знаю, будет ли это работать или нет, но это то, что я попробую с головы до ног.
попробуй это
if (!isset($_SERVER['HTTP_REFERER'])){ echo "uh?"; } else { // The script }
Я думаю, что вы, вероятно, сталкиваетесь с проблемой из-за неправильного направления, но если вы действительно хотите реализовать это, я бы скорее всего сделал это с переменной сеанса . Просто установите main.php
флаг, указывающий, что теперь они могут получить доступ к noaccess.php
а затем перенаправить туда. noaccess.php
проверяет флаг и выполняет только функции, если он установлен.
Чтобы предотвратить доступ к страницам, наилучшей практикой является использование переменных сеанса: $ _SESSION ['username'] и $ _SESSION ['password'], чтобы проверить вашу запись в таблице базы данных, если ваше имя таблицы является «пользователями», имя поля 'и' password ', чтобы пользователи могли получить доступ к странице, иначе они будут перенаправлены на страницу входа, чтобы они могли ввести правильное имя пользователя и пароль в поле ввода.
Ниже приведена анатомия «Предотвращение прямого доступа к странице PHP».
session_start(); $username=$_POST['username']; $password=$_POST['password']; $query="select * from users where username='$_SESSION[username]' and password='$_SESSION[password]'"; $result=mysql_query($query); if($result) { echo "Your login was successful..";// the page you want to go to if login successful { else { header("Location:index.php?action=login");//any page you want to return to if log in failed }
Вы можете использовать $ _SERVER ["HTTP_REFERER"]. Поместите следующий код в начало вашего php-файла и установите $ url равным вашему желаемому URL-адресу, например http://a.com/main.php
if ($_SERVER['HTTP_REFERER'] != $url) { header('Location: noaccess.php'); exit(); }
Почему бы просто не include
перенаправление?
Остальные люди правы, есть проблемы с $ _SERVER ["HTTP_REFERER"], поэтому я думаю, что лучший способ – установить переменную в $ _SESSION или $ _POST, и вам нужно будет проверить, существует ли эта переменная, если не она означает, что это прямой доступ.
Вы пробовали эту Ива. Ниже приведен код, который работает:
$url != 'your-url-which-you-do-not-what-direct access'; if ($_SERVER['HTTP_REFERER'] == $url) { header('Location: otherurl.php'); //redirect to some other page exit(); }
Убедитесь, что это отображается в верхней части страницы, на которой вы не хотите прямого доступа.