Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на сайте 
:(
    Опции темы
MrDmitry
Дата 14.12.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



сделал авторизацию на куках

index.php
Код

header ('Content-Type: text/html; charset=UTF-8');
include 'system.php';


    if(isset($_GET['logout']))
     {
      setcookie('DataBase', "", time()-3600);
      setcookie('user', "", time()-3600);
      header('Location: /');
     }
    
     if(isset($_POST['login']))
      {
       if(check_login($db, $key, $_POST['login'], $_POST['pass']))
        { 
         echo start();
         include 'scheme.php';
        }
       else
        {
         $err = 'Не верный логин или пароль';
         echo start();
         include 'auth.php';
        } 
      }
     else if(isset($_COOKIE['DataBase']) and !empty($_COOKIE['DataBase']))
      {
       echo start();
       include 'scheme.php';
      }
      else
      {
       if (!empty($_COOKIE['DataBase']))
        {
         echo start();
         include 'scheme.php';
        }
      else
       {
         echo start(); 
         include 'auth.php';
       }
     }


auth.php
Код

<div class="auth">            
  <div class="welcome">Форма авторизации       
  </div>            
  <form action="/" method="post">               
    <center>          
      <span class="info_login"> Логин:            
      </span>          
      <input type="text" name="login" id="login" />                 
      <span class="info_pas"> Пароль:            
      </span>          
      <input type="password" name="pass" id="password" />                 
      <input type="hidden" name="login_add" value="login_add" /><br />                 
      <input type="submit" id="button" name="Submit" value="Вход" /><br />                 
      <span class="error">            
        <?=$err?>          
      </span>        
    </center>   
</div>
  

Код


$key='';//Секретный ключ!!


// База
$mysql_connection_host = "localhost";
$mysql_connection_base = "base";
$mysql_connection_user = "root";
$mysql_connection_password = "";

try {  

  $db = new PDO("mysql:host=$mysql_connection_host;dbname=$mysql_connection_base", $mysql_connection_user, $mysql_connection_password);  
}  
catch(PDOException $e) {  
    echo $e->getMessage();  
}


function check_login($db, $key, $login, $password){

 $sql = $db->prepare('SELECT count(*) as count, login, password FROM user WHERE login=:login');
       $sql->bindParam(':login', $login, PDO::PARAM_STR);
       $sql->execute();
       
       list($count, $user, $password_real) = $sql->fetch(PDO::FETCH_NUM);
        if ($count==0)
            return false;
        else
        {
         if ($password_real == md5($key.$password.$key) and $user==$login)
          {
           //$_COOKIE['DataBase'] = base64_encode($user.'|'.$password_real);
            setcookie('user', base64_encode($user), time()+3600);
           setcookie('DataBase', base64_encode($user.'|'.$password_real), time()+3600);
           return true;
          }
          else
           return false;
        }
}




sheme.php
Код

<div class="top"><span class="date"><?=date( "d.m.y" )?></span> <span class="time" id="time"></span> <span class="logout">
Вы вошли как:<a href="#" class="js__p_user_start"><?=base64_decode($_COOKIE['user'])?></a><div class="form"><form action="?logout=<?=md5($_COOKIE['user'])?>"
 method="post"><input type="submit" id="button" name="Submit" value="Выход" /></form></div></span></div>



В общем проблема в том что после операции входа, для того чтоб появилось имя авторизовавшегося пользователя нужно нажать кнопу обновления браузера (((

Это сообщение отредактировал(а) MrDmitry - 14.12.2013, 21:01
PM MAIL   Вверх
bars80080
Дата 14.12.2013, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ещё один хороший пример, который демонстрирует, что надо отделять обработку от выдачи данных


адекватный код должен иметь такую структуру:

1. приём данных
(из кук или POST из формы - не важно)
2. обработка и поиск в БД
3. принятие решение - условие (if) авторизовался пользователь или нет
3а. если нет - то показать форму авторизации с теми значениями, которые ввёл
3б. если да - то перезагрузить страницу header('Location: ...');

соответственно, с начала программы и до самого header в коде не должно быть ни одного echo или print, или любого символа между тэгами ?> <?php - даже пробела
PM MAIL WWW   Вверх
MrDmitry
Дата 14.12.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(bars80080 @ 14.12.2013,  21:23)
ещё один хороший пример, который демонстрирует, что надо отделять обработку от выдачи данных


адекватный код должен иметь такую структуру:

1. приём данных
(из кук или POST из формы - не важно)
2. обработка и поиск в БД
3. принятие решение - условие (if) авторизовался пользователь или нет
3а. если нет - то показать форму авторизации с теми значениями, которые ввёл
3б. если да - то перезагрузить страницу header('Location: ...');

соответственно, с начала программы и до самого header в коде не должно быть ни одного echo или print, или любого символа между тэгами ?> <?php - даже пробела

Ну а собственно как сделано у меня? 

1. Проверка отправлена форма или нет
2. если форма отправлена то поиск данных в БД
3. принятие решение - условие (if) авторизовался пользователь или нет
3а. если нет то выводится по инклуду форма авторизации
3б. Если авторизовался то выводится по инклуду основная страница сайта
4. Если пользователь был авторизован раннее то его перекидывает на основную страницу а не на форму авторизации

Это сообщение отредактировал(а) MrDmitry - 14.12.2013, 21:55
PM MAIL   Вверх
baldina
Дата 14.12.2013, 22:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(MrDmitry @  14.12.2013,  21:53 Найти цитируемый пост)
Ну а собственно как сделано у меня? 

ну значит у вас все правильно, и проблемы нет  smile 
PM MAIL   Вверх
MrDmitry
Дата 14.12.2013, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Проблема есть  smile  Я говорю что вроде как логика правильная(по крайней мере я так думаю) но проблема есть  
PM MAIL   Вверх
SlipKnot
Дата 15.12.2013, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 28.5.2008

Репутация: нет
Всего: -1



Цитата(MrDmitry @  14.12.2013,  20:58 Найти цитируемый пост)
В общем проблема в том что после операции входа, для того чтоб появилось имя авторизовавшегося пользователя нужно нажать кнопу обновления браузера (((

для того чтоб кука выводилась на экран, послее ее установки нужно сделать редирект на этот же скрипт т.е
Код

if(!isset($_COOKIE['name']))
{
    setcookie('name','Vasya');
}

echo 'My name is: '.$_COOKIE['name'];  


В таком виде скрипт установит куку но не подставит в строку

Код

if(!isset($_COOKIE['name']))
{
    setcookie('name','vasya');
    header('Location: /');
}

echo 'My name is: '.$_COOKIE['name'];  


А в таком выведет сразу.
PM   Вверх
doctor2k
Дата 15.12.2013, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



А не проще
Код

if(!isset($_COOKIE['name']))
{
    setcookie('name','vasya');
    echo 'My name is: vasya'; 
}

?
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0853 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.