2013-06-14 6 views
0

У меня есть веб-страница welcome.php, пользователь вводит некоторую информацию на странице welcome.php и отправляет данные, отправляет пользовательские данные на страницу registration.php через $_POST['data']. Это основная концепция.переменная сеанса или файлы cookie

Но если пользователь открывает мою registration.php через какую-либо поисковую систему или любым другим способом. Могу ли я перенаправить его на страницу приветствия. Ответ Yes Я знаю, что это возможно.

Но путаница заключается в том, следует ли установить session variable в php или использовать cookies (но если пользователь отключает файлы cookie?) Или есть ли другой простой способ сделать это?

Мой подход

Создать переменную сеанса в PHP и установите его значение. Теперь, когда пользователь открывает registration.php, проверьте, не изменилась ли переменная isset(), и если она не установлена, перенаправите его на welcome.php

Я не знаю, хорошая ли это идея. Я не знаю, есть ли еще более простые способы сделать это. Как бы то ни было, дайте мне знать, как это сделать.

Что я думал о том, чтобы сократить работу, выполняемую сервером как можно ниже. Благодарю. также дайте мне знать, что такое cookies и sessions, и когда они нам понадобятся и какова их уникальность.

+0

Почему бы вам просто не использовать HTTP-заголовок 'Referer'? – MaxArt

+0

@MaxArt можно отключить, например, файлы cookie – ferdynator

+0

@niko вы могли бы прояснить свое намерение: пытаетесь ли вы проверить, был ли пользователь никогда не был на сайте раньше и поступает из поисковой системы, или вы пытаетесь заблокировать контент или что-то? Мне кажется, что вы просто хотите показать страницу приветствия, если пользователь никогда не был на сайте, но я, возможно, понял, что вы ошибаетесь. – wnajar

ответ

0

Поправьте меня, если я ошибаюсь ....

Если Вы отправляете информацию страницы в другую через форму через GET или POST методы, на целевой странице (registration.php) Вы могли бы просто проверьте, установлена ​​ли важная переменная. например:

if (isset($_POST['user'])){//Check as many variables as You want with AND operator here 

##Your code here... 
##Here You'll store or manipulate Your properly received values... 
##eg: 
$user = $_POST['user']; 
$email = $_POST['email']; 

} 
else { 

header('Location: welcome.php');//redirecting 

} 

Надеюсь, что это поможет.

-1

Файлы cookie являются клиентскими, и их легко манипулировать клиентом, но сеансы являются серверными и не могут быть изменены кем-либо. Поэтому я бы предположил, что было бы лучше, если бы вы использовали сеанс, чтобы проверить, вошел ли он в систему или нет.

+0

Должен ли я считать, что вы знаете, что захват сеанса? –

+0

Да. Вам следует. Если он хорошо обеспечит ввод своего пользователя и предотвратит захват сеанса через его код, этого будет достаточно. Но сеансы определенно безопаснее, чем файлы cookie. – Ali

+0

Почему безопасность, что вы здесь обсуждаете? Как вы думаете, важно ли, чтобы пользователь «подделывал», что они не были на сайте раньше? Я не думаю, что кто-то собирается беспокоиться ... Я мог видеть другие примеры, где это может иметь значение, т. Е. NYT, показывающий контент, если он пришел из поисковой системы, но не здесь. – wnajar

0

Я не думаю, что проблема, которую вы пытаетесь решить, будет решена либо с помощью Cookies, либо $_SESSION переменных. Если вы устарели при проверке, если вы хотите проверить, что такое реферер, а именно: the user came from a search engine, проверьте, есть ли он из поисковой системы. Реферер в основном «какая страница отправила пользователя на эту страницу».

Вы можете проверить это, посмотрев $_SERVER['HTTP_REFERER'], и вы могли бы сделать preg_match() или что-то посмотреть, было ли это от Google или Bing.

Вы также можете использовать другое условие the user has never been to the site before, чтобы перенаправить их на страницу приветствия. Вы сделаете это, установив настройку файла cookie при первом посещении, отправьте на страницу приветствия, а затем воспользуйтесь проверкой на каждой странице, увидев, что cookie настроен на выбор, показывать ли приветствие или просто страницу. Вы не хотели бы использовать сеансы здесь.

Чтобы ответить на ваш вопрос о том, что «сервер делает меньше работы», победитель будет технически быть куки-файлами, но вы не должны принимать решение на основе этого, потому что это незначительно.

+0

Я вообще не предлагаю использовать это. HTTP REFERER может быть изменен, так как они тоже сторонники клиента! – Ali

+0

Хорошо, но это единственный способ проверить, пришел ли пользователь из поисковой системы. Я бы тоже не рекомендовал это делать, но если он действительно действительно умирает, чтобы сделать это, реферер - единственный способ.В противном случае я рекомендовал другое условие, чтобы проверить, что «имеет установленный cookie», то есть посетитель посетил раньше. – wnajar

1

Сессии и файлы cookie аналогичны тем, что сеансы зависят от файлов cookie. EDIT: действительный комментарий @swapnesh - если пользователь отключает куки-файлы, сеансы все равно будут работать, отправив идентификатор сеанса в URL-адрес, а не в файл cookie.

Cookie - это значение, установленное в пользовательском агенте пользователя (браузере). Ваш PHP-скрипт установит это с помощью HTTP-заголовков. В частности, это будет заголовок Set-Cookie (подробнее см. RFC 6265, 4.1). В любой последующий запрос, сделанный UA, он также отправит файлы cookie в заголовки (используя заголовок Cookie, RFC 6265, 4.2). Значение, заданное с помощью файла cookie, будет храниться непосредственно в UA.

Сессия - это некоторые данные, хранящиеся в serwer, связанные с клиентом cookie. Этот сеанс может храниться в памяти сервера или в каком-то постоянном месте (например, в базе данных). Если вы используете сеансы, PHP установит для вас файл cookie, но на этот раз он не будет содержать установленное вами значение, но некоторый идентификатор. Позже, в другом запросе, PHP прочитает этот файл cookie и использует ID для поиска соответствующих данных на стороне сервера.

Что касается вашего конкретного вопроса - если пользователь обращается к registration.php через какую-либо поисковую систему или другой (недействительный), то этот запрос будет либо POST, либо не будет содержать полей формы, которые требуются. Так что вы можете просто проверить параметры в register.php, и если они отсутствуют, перенаправьте пользователя на welcome.php. Он будет работать даже без файлов cookie/сеансов. Если этот подход является приемлемым в вашем случае использования, посмотрите на http_redirect(). Этот метод будет использовать, например, HTTP 301 или HTTP 307 ответы.

+1

Маленькое ложное утверждение о сеансах как 'сеансы также могут быть распространены в URL-адресе, так что это не то, что пользователь отключает cookie, мы не можем отслеживать пользователей только на этой основе – swapnesh

+1

@swapnesh - правда, я забыл об этом. Благодаря! – kamituel

Смежные вопросы