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

Форум PHP

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

 

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

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

тема: Авторизация
 
 автор: ddhvvn   (03.06.2006 в 09:58)   письмо автору
 
 

У меня после авторизации данные о пользователе сохраняются в cookie и происходит переход на страницу. У этой страницы в начале происходит проверка - авторизован ли пользователь. Если нет - выход, да - страница загружается. Но получается так что, если пользователт авторизовался первый раз - всегда выдается "Вы не авторизованы".
Со второго раза - все сразу загружается. В чем проблема???

   
 
 автор: WebTech   (03.06.2006 в 11:04)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 09:58)
 

Как проиходит проверка, авторизован ли пользователь? Если можно, то выложите код...

   
 
 автор: valenok   (03.06.2006 в 11:04)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 09:58)
 

Проблема в том что ты не выложил скрипт.

   
 
 автор: ddhvvn   (03.06.2006 в 11:39)   письмо автору
 
   для: valenok   (03.06.2006 в 11:04)
 

Проверка авторизации простая, взята с книги
if(!isset($_COOKIE['user']))
  {
     exit("Вы не авторизованы!");
  }

Сохранение в cookie оттуда же
setcookie("usr",$var1,time()+60*15);//логин
    setcookie("psd", $var2,time()+60*15);//пароль

   
 
 автор: cheops   (03.06.2006 в 14:31)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 09:58)
 

Дело в том, что cookie передаются через HTTP-заголовки, пока сервер не отправит заголовки клиенту - они не устанавливаются... скорее всего дело в порядке вызова функции setcookie() и обращения к массиву $_COOKIE. Но нужно больше подробностей где и когда что вызывается - у нас нет перед глазами кода, поэтому нам сложно сразу указать в чём может быть загвоздка.

   
 
 автор: ddhvvn   (03.06.2006 в 15:31)   письмо автору
 
   для: cheops   (03.06.2006 в 14:31)
 

Заголовки я тоже старался иметь в виду.
Использовал ob_start()..ob_end_clean()
Например
  ob_start();            // в самом начале скрипта

  $login = stripslashes(htmlspecialchars($_POST["usr"]));
  $passwd = stripslashes(htmlspecialchars($_POST["psd"]));

  ...           // здесь проверка на наличие в БД
  
  setcookie("usr",$var1,time()+60*15);//логин 
  setcookie("psd", $var2,time()+60*15);//пароль 

  ob_end_clean;

 include("primer.php");    //загрузка другой страницы, где будет проверка авторизациит (см. выше)

   
 
 автор: valenok   (03.06.2006 в 16:22)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 15:31)
 

Это Весь код?
Извольте объяснить - пароль в куку зачем?

   
 
 автор: ddhvvn   (03.06.2006 в 19:36)   письмо автору
 
   для: valenok   (03.06.2006 в 16:22)
 

Это далеко не весь код. Я просто показал, как сохраняются логин и пароль.
Всего около десятков страниц (PHP), на которых будет проверяться авторизация, как я уже говорил выше:
  if(!isset($_COOKIE['user'])) 
  { 
     exit("Вы не авторизованы!"); 
  }

Прошуу вашей помощи!

   
 
 автор: WebTech   (03.06.2006 в 20:11)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 19:36)
 

У вас куки устанавливаются с именем "usr", а проверяются с именем "user"...

   
 
 автор: ddhvvn   (03.06.2006 в 21:34)   письмо автору
 
   для: WebTech   (03.06.2006 в 20:11)
 

Упс. Сюда закралась опечатка
Проверка авторизации, читай
  if(!isset($_COOKIE['usr'])) 
  { 
     exit("Вы не авторизованы!"); 
  }

Помогите кто-может, позарез надо.

   
 
 автор: valenok   (03.06.2006 в 21:56)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 21:34)
 

кто такой $var1 , $var2
Если не т рудно выложи весь скрипт авторизации от начала до конца.
Можешь форму отрезать.

   
 
 автор: ddhvvn   (03.06.2006 в 22:03)   письмо автору
 
   для: valenok   (03.06.2006 в 21:56)
 

Хорошо. Немного подправил и вот глюкнутая зараза:
<?php

  ob_start
();

  
$login stripslashes(htmlspecialchars($_POST["login"]));
  
$passwd stripslashes(htmlspecialchars($_POST["password"]));
  
$login str_replace("'","'",$login);

  include 
"connect.php";


  
$zapr=@mysql_query("SELECT * FROM users WHERE login='$login'");
  if(!
zapr)
  {
    exit(
"Ошибка при авторизации!");
  }

  if(
mysql_num_rows($zapr) == 0)
  {
    exit(
"Такого пользователя не существует!");
  }
  else
  {
    
$user=mysql_fetch_array($zapr);
    if(
$user["password"]!=md5($passwd))
    {
      exit(
"Неверный пароль!");
    }
  }

    
setcookie("user",$login,time()+60*15);
    
setcookie("password"md5($password),time()+60*15);

  
ob_end_clean;

  include(
"next.php");

?>  


В самом начале next.php
<?php

  
if(!isset($_COOKIE['user']))
  {
     exit(
"Вы не авторизованы!");
  } 
  
//дальше ничего не относится к авторизации


Вот. Если пользователь аворизуется вообще первый раз (т.е. отсутствует файл куки) происходит
exit("Вы не авторизованы!");
.

Со второго раза все номально.

   
 
 автор: cheops   (03.06.2006 в 22:54)   письмо автору
 
   для: ddhvvn   (03.06.2006 в 15:31)
 

Всё правильно... лучше поставить перезагрузку страницы после setcookie, так как при первой загрузке primer.php HTTP-заголовки отправляются пользователю, но массив $_COOKIE ещё пуст, так как для того, чтобы его заполнить - нужно чтобы браузер прислал HTTP-заголовки cookie - а это происходит лишь после перезагрузки страницы...

   
 
 автор: valenok   (03.06.2006 в 23:17)   письмо автору
 
   для: cheops   (03.06.2006 в 22:54)
 

Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires. Expire time is set via the expire parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);.

   
 
 автор: ddhvvn   (04.06.2006 в 10:23)   письмо автору
 
   для: valenok   (03.06.2006 в 23:17)
 

>Cookies will not become visible until the next loading of a
>page that the cookie should be visible for. To test if a
>cookie was successfully set, check for the cookie on a next
>loading page before the cookie expires. Expire time is set
>via the expire parameter. A nice way to debug the existence
>of cookies is by simply calling print_r($_COOKIE);.

??????????
Объясни ПО-РУССКИ!

   
 
 автор: ddhvvn   (04.06.2006 в 10:22)   письмо автору
 
   для: cheops   (03.06.2006 в 22:54)
 

>Всё правильно... лучше поставить перезагрузку страницы после
>setcookie, так как при первой загрузке primer.php
>HTTP-заголовки отправляются пользователю, но массив $_COOKIE
>ещё пуст, так как для того, чтобы его заполнить - нужно
>чтобы браузер прислал HTTP-заголовки cookie - а это
>происходит лишь после перезагрузки страницы...

Извините, напомните - как сделать ту самую перезагрузку

   
 
 автор: Panker   (04.06.2006 в 10:38)   письмо автору
 
   для: ddhvvn   (04.06.2006 в 10:22)
 

Пример из моей гостевой, помойму один принцип у мну тоже даются куки но сразу не выводятся я перезагружаю страницу и всё пучком =)))


if ((empty ($_COOKIE['name'])) && (empty ($_COOKIE['mail'])))  //Посылает
{setcookie("name","Введите Имя", mktime(0,0,0,1,1,2009));      //Куки
setcookie("mail","Введите Email", mktime(0,0,0,1,1,2009));     //Юзеру
header("Location: index.php");}                                //Перекидывает на главную после получения куки

   
 
 автор: cheops   (04.06.2006 в 11:27)   письмо автору
 
   для: ddhvvn   (04.06.2006 в 10:22)
 

Можно воспользовать либо заголовков Location, как пишет Panker
<?php
  header
("Location: $_SERVER[PHP_SELF]")
?>

либо воспользоваться META-тэгами
<?php
    
echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$_SERVER[PHP_SELF]'>
          </HEAD></HTML>"
;
?>

   
 
 автор: ddhvvn   (04.06.2006 в 11:48)   письмо автору
 
   для: cheops   (04.06.2006 в 11:27)
 

Теперь у меня вообще выдает "Такого пользователя не существует!"
Покажите на МОИХ кодах (см. выше) куда вставлять этот
header("Location: $_SERVER[PHP_SELF]"); 

Мне срочно надо, помогите пжлста!

   
 
 автор: ddhvvn   (04.06.2006 в 17:56)   письмо автору
 
   для: ddhvvn   (04.06.2006 в 11:48)
 

Ну что так никто и не подскажет, где размещать этот header???

   
 
 автор: hell_riser   (04.06.2006 в 19:52)   письмо автору
 
   для: ddhvvn   (04.06.2006 в 17:56)
 

Мне кажется что вам надо не инклюдить next.php а перегружать пользователя на него

<?php
//так у вас.
include "next.php";

//Попробуйте так.
 
echo "<META HTTP-EQUIV='REFRESH' CONTENT='0 URL=next.php'>";
 
?>

   
Rambler's Top100
вверх

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