|
|
|
| Всем привет!
Вот не могу понять, каким образом можно реализовать возможность при корректном логине трансфер на нужную страницу сайта?
Подскажите пожалуйста!
Вот сам сценарий:
<?php
// авторизация
if($_POST['action'] == "1")
{
include 'admin/config.php'; // скрипт подключения к базе данных
session_start(); // начинаем сразу сессию
// получаем значения логина и пароля из формы
$login = mysql_escape_string($_POST['login']);
$password = mysql_escape_string($_POST['password']);
// проверяем наличие переданных логина и пароля в базе данных
$res = mysql_query('select login, password
from id
where login="'.$login.'" and password="'.$password.'"');
$num = mysql_num_rows($res);
if ($num == 0)
{
echo 'Неверный логин и/или пароль!';
exit;
}
// записываем переменные сессии
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
//здесь что-то для трансфера на нужную страницу
cur
}
?>
|
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(07.08.2006 в 23:36)
| | Можно поступить следующим образом
<?php
// авторизация
if($_POST['action'] == "1")
{
include 'admin/config.php'; // скрипт подключения к базе данных
session_start(); // начинаем сразу сессию
// получаем значения логина и пароля из формы
$login = mysql_escape_string($_POST['login']);
$password = mysql_escape_string($_POST['password']);
// проверяем наличие переданных логина и пароля в базе данных
$res = mysql_query('select login, password
from id
where login="'.$login.'" and password="'.$password.'"');
$num = mysql_num_rows($res);
if ($num == 0)
{
echo 'Неверный логин и/или пароль!';
exit;
}
// записываем переменные сессии
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
//здесь что-то для трансфера на нужную страницу
header("Location: адрес_страницы_переадресации.php");
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 23:38)
| | Привет!
Но у меня ничего не переадресовывает...
Я сделал как написано выше, но вот какое предупреждение:
Warning: Cannot modify header information - headers already sent by (output started at c:\www\test_site\rus\login.php:7) in c:\www\test_site\rus\login.php on line 87
Ещё вот хотел такое спросить, я dот тестировал и скажите, правильно ли я мыслю, что при выключенных cookie у меня пользователь не сможет попасть на страницу, которая требует предварительной авторизации.
На каждой такой странице - авторизированной я пишу вначале код:
<?php
include 'admin/config.php';
session_start();
$login = mysql_escape_string($_SESSION['login']);
$password = mysql_escape_string($_SESSION['password']);
// проверяем логин и пароль из переменных сессии на наличие в базе данных
$res = mysql_query('select login, password
from id
where login="'.$login.'" and password="'.$password.'"');
$num = mysql_num_rows($res);
if ($num == 0)
{
echo 'Ошибка авторизации, пожалуйста введите правильный логин и/или пароль!';
exit;
}
?>
|
Это нормально, то есть безопасно ли это? Можно ли обмануть данный сценарий?
Заранее спасибо за помощь! | |
|
|
|
|
|
|
|
для: Vados
(08.08.2006 в 00:04)
| | Заголовок должен посылаться перед каким-либо выводом. Т.е. не должно быть операторов echo, а также сообщений об ошибках от РНР перед вызовом функции header().
Есть альтернативный вариант: включть буфферизацию вывода
- в php.ini output_buffering = On
или
- в самом начале скрипта вызвать функцию ob_start(), котораю и инициализирует ту самую буфферизацию вывода | |
|
|
|
|
|
|
|
для: ec_stasis
(08.08.2006 в 01:04)
| | Не совсем понимаю!
В таком случае, если я буду использовать функцию ob_start() у меня всё, что находится в скрипте всё будет буферизироваться, но зачем мне это?
Кроме этого всё остаётся по прежнему, трансфера на указанную мной страницу нет.
И что значит поддавить все сообщения об предупреждениях? Для чего это, что мне это даст?
Спасибо! | |
|
|
|
|
|
|
|
для: Vados
(08.08.2006 в 01:55)
| | http://phpfaq.ru/headers | |
|
|
|
|
|
|
|
для: Vados
(08.08.2006 в 00:04)
| | Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12
http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Вы можете также включить буфферизацию, если имеете доступ к конфигурационному файлу php.ini
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8484 | |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 23:38)
| | попробуй вместо
header("Location: адрес_страницы_переадресации.php");
|
написать такой код
<?php
echo '<html><head><meta http-equiv="Refresh" content="0; page.php"></head></html>';
// или
echo '<script language="javascript">location.replace("page.php")</script>';
?>
|
но лучше конечно настроить РНР для переадресации заголовком, то есть хедером | |
|
|
|
|
|
|
|
для: cheops
(07.08.2006 в 23:38)
| | а лучше изменить данный код например так
<?php
// авторизация
if($_POST['action'] == "1")
{
include 'admin/config.php'; // скрипт подключения к базе данных
session_start(); // начинаем сразу сессию
// получаем значения логина и пароля из формы
$login = mysql_escape_string($_POST['login']);
$password = mysql_escape_string($_POST['password']);
// проверяем наличие переданных логина и пароля в базе данных
$res = mysql_query('select login, password
from id
where login="'.$login.'" and password="'.$password.'"');
if (mysql_num_rows($res) > 0)
{
// записываем переменные сессии
$_SESSION['login'] = $login;
$_SESSION['password'] = $password;
//здесь что-то для трансфера на нужную страницу
header("Location: адрес_страницы_переадресации.php");
}
else
exit("Error");
}
?>
|
| |
|
|
|