2010-05-21 2 views
1

У меня есть 3 файла:Передача аргументов через заголовок в PHP

  • login.html
  • login_check.php
  • welcome.php

В login.html при вводе имени пользователя и пароля и нажатии кнопки передачи login_check.php проверяет, находится ли запись имени пользователя в базе данных на основе $_POST['username'] и некоторых SQL qu чень. Теперь я поставил следующий код в нижней части login_check.php

login_check.php:

header('Location:welcome.php') 

Но я хочу передать $_POST['username'] от login_check.php к welcome.php, так что я могу использовать $_POST['username'] в моей странице приветствия. Есть ли способ, которым я могу передать аргумент, как в приведенном выше случае?

ответ

10

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

Вы можете установить сеанс на login_check странице, как:

session_start(); // this should be on top of login_check file 

// this goes just before redirect line 
$_SESSION['username'] = $_POST['username']; 

Теперь на странице приветствия, вы можете показать имя пользователя как:

session_start(); // this should be on top of welcome page. 
echo `Welcome ` . $_SESSION['username']; 
0

Это можно сделать с помощью QUERY_STRING (я уверен, что вы его видели раньше - эти? И & в адресной строке), но вы не должны делать это, поскольку это просто небезопасно.

A session - это обычный способ сохранить имя пользователя после авторизации и авторизации в целом.

+0

Да, не делать это таким образом, используйте $ _SESSION супер Глобальный. –

0

сессия должна использоваться только для сессии данные - не для данных, относящихся к конкретному переходу на страницу. Однако запись факта аутентификации пользователя и имя пользователя, с которым они были аутентифицированы, - это данные сеанса.

Поэтому, если вы не должны использовать данные сеанса для передачи информации из login.php в login_check.php, в login_check.php, если аутентификация прошла успешно, тогда вы должны сохранить аутентифицированное имя пользователя в сеансе.

Хотя, как и полковник шрапнель говорит, что вы можете сделать:

header('Location:welcome.php?username=' . urlencode($_POST['username'])); 

Это тривиально, чтобы обойти - вам просто нужно ввести имя пользователя welcome.php = админ в вашем браузере, чтобы нарушить безопасность?.

Если это еще не ясно, рассмотрите ситуацию, когда пользователь одновременно открывает два окна браузера, перемещаясь по различным частям сайта (т. Е. Используя одни и те же данные сеанса). Если оба браузера передают данные в одно и то же время, которые записаны на сеанс, и вы не уверены в результатах, то вам, вероятно, не следует хранить данные в сеансе.

НТН

С.

+0

Это будет показывать имя пользователя только в первый раз, начиная с страницы login_check, но это не то, что он ищет. – Sarfraz

-1

Используя заголовок (www.xxx.com?action= «») будет единственным способом передачи без сохранения его в качестве сессии.

4

«с помощью заголовка (wwww.xxx.com?action='') будет единственным способом передачи без сохранения его в качестве сессии»

будет достаточно

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