Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация
 
 автор: uvajs   (24.07.2010 в 09:21)   письмо автору
 
 

Здравствуйте! подскажите пожалуйста, как после авторизации направить пользователя на ту же страницу?

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 11:21)   письмо автору
 
   для: uvajs   (24.07.2010 в 09:21)
 

<?php
header
("Location: {$_SERVER['HTTP_REFERER']}");
die;

  Ответить  
 
 автор: Гавриленко Дмитрий   (24.07.2010 в 12:55)   письмо автору
 
   для: neadekvat   (24.07.2010 в 11:21)
 

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

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 13:04)   письмо автору
 
   для: Гавриленко Дмитрий   (24.07.2010 в 12:55)
 

Тогда два варианта:
1. На странице с формой HTTP_REFERER еще будет - впихнуть его в поле hidden, а потом соответственно отправить на страницу, указанную в этом поле;
2. Просто перенаправить на главную.

  Ответить  
 
 автор: Гавриленко Дмитрий   (24.07.2010 в 13:08)   письмо автору
 
   для: neadekvat   (24.07.2010 в 13:04)
 

Можно взаимно с базой... но это по моему не очень практично.

  Ответить  
 
 автор: neadekvat   (24.07.2010 в 14:08)   письмо автору
 
   для: Гавриленко Дмитрий   (24.07.2010 в 13:08)
 

Так, а причем тут база? оО

  Ответить  
 
 автор: Trianon   (24.07.2010 в 16:23)   письмо автору
 
   для: uvajs   (24.07.2010 в 09:21)
 

<?php
header
("Location: та-же-страница");
die;


а при чем тут авторизация?

  Ответить  
 
 автор: uvajs   (25.07.2010 в 15:31)   письмо автору
 
   для: Trianon   (24.07.2010 в 16:23)
 

>
<?php
>header("Location: та-же-страница");
>die;

>
>а при чем тут авторизация?

а где это прописать?

  Ответить  
 
 автор: Trianon   (26.07.2010 в 08:50)   письмо автору
 
   для: uvajs   (25.07.2010 в 15:31)
 

там, где принимается решение выполнить переход.

  Ответить  
 
 автор: uvajs   (26.07.2010 в 09:50)   письмо автору
 
   для: Trianon   (26.07.2010 в 08:50)
 

>там, где принимается решение выполнить переход.

У меня за перенаправ. отвечает кусок кода
echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
но если заменить код на
header("Location: {$_SERVER['HTTP_REFERER']}"); 
die;
выдает ошибки: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\engells.com\www\enter.php:13) in Z:\home\engells.com\www\enter.php on line 105

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\engells.com\www\enter.php:13) in Z:\home\engells.com\www\enter.php on line 106

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\engells.com\www\enter.php:13) in Z:\home\engells.com\www\enter.php on line 107

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\engells.com\www\enter.php:13) in Z:\home\engells.com\www\enter.php on line 118

хотя в файле exit.php, т.е. выход из сессии работает нормально этот код.

  Ответить  
 
 автор: Slo_Nik   (26.07.2010 в 10:24)   письмо автору
 
   для: uvajs   (26.07.2010 в 09:50)
 

это говорит о том, что заголовки уже отправлены...
или же есть вывод информации отличной от заголовка...
это может произойти из-за того, что где то в скрипте, раньше headers() уже есть вывод информации при помощи echo(), print() или есть пробельные символы вне тегов <?php ?>.
Можно избежать этой ошибки если включить буферизацию вывода.
Если у Вас за перенаправление отвечает echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>"; ну так и используйте её для всех перенаправления, которые Вам нужны, естественно меняя имя файла на который надо сделать перенаправление.

  Ответить  
 
 автор: uvajs   (26.07.2010 в 10:36)   письмо автору
 
   для: Slo_Nik   (26.07.2010 в 10:24)
 

<echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
Прописать этот код во всех файлах?

>это может произойти из-за того, что где то в скрипте, раньше headers() уже есть вывод информации при помощи echo(), print() или есть пробельные символы вне тегов <?php ?>.

не думаю, что тут есть headers(). вот этот файл


<?php
session_start
();
          
if (isset(
$_POST['login'])) { $login $_POST['login']; if ($login == '') { unset($login);} } 
if (isset(
$_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
?>
<html>
<head>
<title>Ошибка при регистрации</title>
<link href="style.css" rel="stylesheet" type="text/css">
<link href="style2.css" rel="stylesheet" type="text/css">
<meta name="keywords" content="<?php echo $myrow["meta_k"];?>">
<meta name="description" content="<?php echo $myrow["meta_d"];?>">
<script type="text/javascript" src="js/swfobject.js"></script>
<link rel="icon" href="http://engells.com/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="http://engells.com/favicon.ico" type="image/x-icon">
</head>
</html>

<div id="icon_save"><img src="img/warning.jpg" width="80" height="80"></div>
<?
if (empty($login) or empty($password)) {
exit (
"<p class='reg_error'>Вы ввели не всю информацию, вернитесь назад и заполните все поля!</p>"); 
}
$login stripslashes($login);
$login htmlspecialchars($login);

$password stripslashes($password);
$password htmlspecialchars($password);

//удаляем лишние пробелы
$login trim($login);
$password trim($password);


// дописываем новое********************************************

// подключаемся к базе
include ("block/bd.php");
// минипроверка на подбор паролей
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty(
$ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.

$result mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);// извлекаем из базы колличество неудачных попыток входа за последние 15 минут у пользователя с данным ip
$myrow mysql_fetch_array($result);

if (
$myrow['col'] > 10) {
exit (
"<p class='reg_error'>Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.</p>"); 


}

$password md5($password);//шифруем пароль 
$password strrev($password);// для надежности добавим реверс
$password $password."b3p6f";



$result mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); 
$myrow mysql_fetch_array($result);
if (empty(
$myrow['id']))
{

$select mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
$tmp mysql_fetch_row ($select);
if (
$ip == $tmp[0]) {
$result52 mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow52 mysql_fetch_array($result52);

$col $myrow52[0] + 1;//Если есть,то приплюсовываем количесво 
mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
}

else {
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}

exit (
"<p class='reg_error'>Извините, введённый вами логин или пароль неверный.</p>"); //останавливаем выполнение сценариев

}
else {

          
$_SESSION['password']=$myrow['password']; 
          
$_SESSION['login']=$myrow['login']; 
          
$_SESSION['id']=$myrow['id'];
          

if (isset(
$_POST['save'])){
setcookie("login"$_POST["login"], time()+9999999);
setcookie("password"$_POST["password"], time()+9999999);
setcookie("id"$myrow['id'], time()+9999999);
}

if (isset(
$_POST['autovhod'])){
//Если пользователь хочет входить на сайт автоматически
setcookie("auto""yes"time()+9999999);
setcookie("login"$_POST["login"], time()+9999999);
setcookie("password"$_POST["password"], time()+9999999);
setcookie("id"$myrow['id'], time()+9999999);}
}    

header("Location: {$_SERVER['HTTP_REFERER']}"); 
die;

//перенаправляем пользователя на главную страничку, там ему и сообщим об удачном входе

?>

  Ответить  
 
 автор: Slo_Nik   (26.07.2010 в 10:50)   письмо автору
 
   для: uvajs   (26.07.2010 в 10:36)
 

Вы внимательно прочли то, что я Вам написал?
Перечитайте ещё раз и внимательно посмотрите на Ваш код.

  Ответить  
 
 автор: Trianon   (26.07.2010 в 11:44)   письмо автору
 
   для: Slo_Nik   (26.07.2010 в 10:50)
 

Послушайте, кого Вы пытаетесь вразумить?
Явно ж видно, что код чужой (это помимо того, что насквозь гнилой), и что автор в нем ни полбуквы не понимает.
Однако ж тем не менее, туда же. Авторизацию писать.

  Ответить  
 
 автор: uvajs   (26.07.2010 в 12:02)   письмо автору
 
   для: Trianon   (26.07.2010 в 11:44)
 

>Послушайте, кого Вы пытаетесь вразумить?
>Явно ж видно, что код чужой (это помимо того, что насквозь гнилой), и что автор в нем ни полбуквы не понимает.
>Однако ж тем не менее, туда же. Авторизацию писать.

я и не говорил, что сам написал. это просто готовы скрипт я реализовал на сайте.

  Ответить  
 
 автор: Trianon   (26.07.2010 в 12:50)   письмо автору
 
   для: uvajs   (26.07.2010 в 12:02)
 

Так а я не к тому, что код не Вами написан. Это, в конце концов, сплошь и рядом.
Я к тому, что Вы слепо скопировали код, не поняв в нем ничего.
Код этот наполнен потенциальными ошибками и приемами, не выдерживающими никакой критики, чуть более, чем полностью.
И Вы пишете - реализовал. Если реализовали Вы - значит Вы отвечаете за то, как он работает?
А как Вы можете отвечать, если не понимаете, зачем в нем применена половина конструкций?

И ладно бы какая-нибудь фигня малосущественная.
А тут скрипт авторизации. А скрипт авторизации, в отличие от много чего другого, работает с паролями - то есть данными, которые Вам, как разработчику системы, как владельцу ресурса, не принадлежат.

  Ответить  
 
 автор: Valick   (26.07.2010 в 12:54)   письмо автору
 
   для: Trianon   (26.07.2010 в 12:50)
 

как разработчику системы, как владельцу ресурса, не принадлежат
ну это чаще всего решается пользовательским соглашением типа:
"админисрация ответственности не несёт..."

  Ответить  
 
 автор: uvajs   (26.07.2010 в 11:12)   письмо автору
 
   для: Slo_Nik   (26.07.2010 в 10:24)
 

>это говорит о том, что заголовки уже отправлены...
>или же есть вывод информации отличной от заголовка...
>это может произойти из-за того, что где то в скрипте, раньше headers() уже есть вывод информации при помощи echo(), print() или есть пробельные символы вне тегов <?php ?>.


я Вас не совсем понимаю. где у меня headers()? и я не вижу пробельные символы...

>Можно избежать этой ошибки если включить буферизацию вывода.
Можно подробнее?

  Ответить  
 
 автор: Slo_Nik   (26.07.2010 в 12:36)   письмо автору
 
   для: uvajs   (26.07.2010 в 11:12)
 

>Можно подробнее?
подробней в руководстве по php или в google, ищите информацию о буферизации вывода

>я Вас не совсем понимаю. где у меня headers()? и я не вижу пробельные символы...

вывод информации перед посылкой заголовков при помощи headers()
пробельный символ это как вариант появления ошибки. что может ещё вызвать такую ошибку я тоже Вам написал и у Вас в коде это есть. читайте внимательно

  Ответить  
 
 автор: ols   (24.07.2010 в 16:50)   письмо автору
 
   для: uvajs   (24.07.2010 в 09:21)
 

<form action="" ....>

  Ответить  
 
 автор: bishake   (26.07.2010 в 10:56)   письмо автору
 
   для: uvajs   (24.07.2010 в 09:21)
 

Если Вы хотите перенаправить пользователя на другую страницу после отправки заголовков, то воспользуйтесь JS:

<?php 
   
echo "<script>window.location.href = 'http://www.google.com';</script>";
?>

  Ответить  
 
 автор: neadekvat   (26.07.2010 в 12:53)   письмо автору
 
   для: bishake   (26.07.2010 в 10:56)
 

Во-первых, ТС скорее всего так и будет отправлять в гугл
Во-вторых, не нужен такой страшный костыль. Проблема "header already sent" вознкиает при неправильном проектировании, и если она вылезла - надо менять логику приложения.
Ну или буферизацию использовать..

  Ответить  
 
 автор: Trianon   (26.07.2010 в 13:31)   письмо автору
 
   для: neadekvat   (26.07.2010 в 12:53)
 

>Во-вторых, не нужен такой страшный костыль.
>Проблема "header already sent" вознкиает при неправильном проектировании, и если она вылезла - надо менять логику приложения.

Вот именно.

>Ну или буферизацию использовать..

Буферизация - тоже костыль.

  Ответить  
 
 автор: uvajs   (26.07.2010 в 14:44)   письмо автору
 
   для: Trianon   (26.07.2010 в 13:31)
 

Все заработало! просто пробелы были в файле, где подключение к базе. Спасибо всем!

  Ответить  
 
 автор: Slo_Nik   (26.07.2010 в 15:54)   письмо автору
 
   для: uvajs   (26.07.2010 в 14:44)
 

вот это и есть как раз те самые пробельные символы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования