предотвращение прямого доступа к php-странице, доступ только при перенаправлении

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

Я имею в виду, допустим, у меня есть страница под названием «main.php» и другой php-файл, который я хочу предотвратить прямому доступу, называемый «noaccess.php».

Я хочу сделать noaccess.php доступным только в том случае, если я перенаправляюсь из main.php

Какие-либо предложения?

UPDATE: Сессия – хорошая идея, но проблема в том, что я должен использовать JavaScript для перенаправления страницы, поэтому вопрос в том, могу ли я использовать ajax для установки сеанса php?

ОБНОВЛЕНИЕ 2: ОК. Я нашел решение, мне не нужно препятствовать прямому доступу сейчас, так как я могу проверить из mysql, должна ли страница быть доступной или нет.

Solutions Collecting From Web of "предотвращение прямого доступа к php-странице, доступ только при перенаправлении"

Что делать, если каждый раз, когда вы собираетесь перенаправить, вы сохранили значение в переменной $ _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(); } 

Убедитесь, что это отображается в верхней части страницы, на которой вы не хотите прямого доступа.