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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> необычная авторизация 
:(
    Опции темы
Sniper
Дата 29.1.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



суть проблемы.

со своего вёб сервера я посылаю запрос на ещё один компьютер он выдаёт в ответ логин/пароль.
пример

Код

       if (ответ от того компа хороший) {
           $_SESSION['username'] = htmlspecialchars($_POST['login']);
           $_SESSION['userpass'] = htmlspecialchars($_POST['password']);
           setcookie('login',htmlspecialchars($_POST['login']),mktime(0,0,0,1,1,2015),'/',false);
           setcookie('pass',md5(htmlspecialchars($_POST['password'])),mktime(0,0,0,1,1,2015),'/',false);
           header("Location: nextpage.php");
           exit;
         }


собственно вопрос: как организовать проверку куков на вот этой самой nextpage.php?

$_SESSION['username'] мне нужен на всех поледующих страницах разумеется или есть какой-то другой суперглобальный массив для хранения логинов?

Это сообщение отредактировал(а) Sniper - 29.1.2009, 10:59


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
enof
Дата 29.1.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



$_COOKIE?
И зачем перед записью применяется htmlspecialchars()?
PM MAIL ICQ Skype   Вверх
Sniper
Дата 29.1.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
$_COOKIE?

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

Цитата
И зачем перед записью применяется htmlspecialchars()?

ой ;-)

Это сообщение отредактировал(а) Sniper - 29.1.2009, 11:36


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
enof
Дата 29.1.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не совсем понял,что требуется smile 
Если логин и пароль введены правильные,то пишите в сессию,т.е. $_SESSION имя пользователя.
Пароль туда писать не нужно.
Потом просто смотрите $_SESSION['username'],если не пусто,то значит юзер уже авторизацию проходил и все хорошо.

Зачем обновлять сессию?
На что проверять куки?
PM MAIL ICQ Skype   Вверх
Sentox
Дата 29.1.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Привсём этом  php в сессии сам использует куки.Ну а пароль в куках ИМХО не безопасно.
PM MAIL   Вверх
Sniper
Дата 29.1.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Потом просто смотрите $_SESSION['username'],если не пусто,то значит юзер уже авторизацию проходил и все хорошо.

Да у меня сделано именно так, только вот как раз хорошо да не всё. Сборщик мусора (garbage collector) стирает сессию поэтому переменная пропадает и получается много много ошибок при обновлении странички где-нибудь через час. 

Вот и получается что нужно пользователя както авторизовать снова и пересоздать переменную сессии. Только вот как это в скрипте реализовать?

Это сообщение отредактировал(а) Sniper - 29.1.2009, 15:53


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
enof
Дата 29.1.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сначало идет авторизация,если все успешно,то в сессию пишется ник и в куку пишется ник + мд5 пароля(не лучшее решение,ради примера.)
Если в сессии есть ник,то все нормально.Если нет,то из куки берутся данные для авторизации,проверяются,если данные верные,то в сессию снова пишется ник.
Если ни в куках,ни в сессии ничего нет,то значит юзер не проходил авторизацию и выдать ему форму входа или что у вас там.
PM MAIL ICQ Skype   Вверх
ksnk
Дата 29.1.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Sniper, Пара мыслей
Куку можно и одну ставить, $_POST['login'].'|'.$_POST['password'], потом резать по первому |. C таким символом все равно нельзя логин создавать, наверное smile. 
Куку можно как-то назвать невызывающе, не login или password, а как-нибудь  "x098rtys". Чтобы не вводить в искушение ФСБ. 
Неплохо бы значение куки-пароля как-то кодировать обратимо,  для видимости защиты. Очень бывает неприятно говорить с заказчиком, который в собственных куках случайно увидит собственный пароль smile




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
enof
Дата 29.1.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ksnk @  29.1.2009,  16:44 Найти цитируемый пост)
Куку можно и одну ставить, $_POST['login'].'|'.$_POST['password'], потом резать по первому |. C таким символом все равно нельзя логин создавать, наверное smile. 

Зачем запрещать использовать какие-то символы в нике?

Цитата(ksnk @  29.1.2009,  16:44 Найти цитируемый пост)
Неплохо бы значение куки-пароля как-то кодировать обратимо,  для видимости защиты

Если в базе хранится хеш,а не сам пароль,то наверн лучше его закодировать.
PM MAIL ICQ Skype   Вверх
Sniper
Дата 29.1.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Если в сессии есть ник,то все нормально.


ступор.

В сесии, сразу после авторизации, есть ник. 
На другой странице(отличной от страницы авторизации) нужно писать проверку существования этого никак в сесии.
Откуда я возьму ник чтобы проверить ник в сесии, из куки?
Код

     if ($_SESSION['username'] == ник, какой? ) {
      // сюда весь скрипт чтоли надо вставить? это не получится ;-(
     } 
    if ($_SESSION['username'] == '' )  {
       $_SESSION['username'] = $_COOKIE['username']; //для примера
     }


Это сообщение отредактировал(а) Sniper - 29.1.2009, 17:09


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
enof
Дата 29.1.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще на разных языках по ходу разговариваем smile 
Авторизация:
1.Пользователь видит форму логин\пароль,вводит данные и жмет на кнопку
2.Скрипт проверяет введеные данные,т.е. сравнивает с данными из б.д.
3.Если логин\пароль правильные,в $_SESSION['username'] пишется ник только что авторизированного пользователя.
4.В $_COOKIE['username'] пишется ник пользователя.В $_COOKIE['secretkey'] пишется закодированный хеш пароля.

На это авторизация закончена,далее:
Если в $_SESSION['username'] есть данные,то ничего не делаем.Авторизация была пройдена до этого и ничего проверять не требуется.
Если в $_SESSION['username'] ниче нет,смотрим в куки.
    Если $_COOKIE['username'] и $_COOKIE['secretkey'] не пустые,то $_COOKIE['secretkey'] разкодируются обратно в пароль и 
    $_COOKIE['username'] & раскодированный пароль сравниваются с данными из базы данных.Если все ОК,то в $_SESSION['username']
    пишется ник пользователя.И на следующей странице уже в сессии будет ник.Авторизация была пройдена до этого и ничего проверять не требуется.
Если в куках и в сессии ниче нет,то значит говорить что вы не прошли авторизацию и т.д.
PM MAIL ICQ Skype   Вверх
Sniper
Дата 29.1.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



всё всё, пора валить домой, заработался совсем ;-))))

p.s всё я понял ;-)


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Sniper
Дата 30.1.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, не получается ;-(

Код

  if ($_SESSION['userpass'] == '') {
    // проверяем логин пароль
        if (проверка пройдена){
          $_SESSION['username'] = $_COOKIE['username'];
          $_SESSION['userpass'] = $_COOKIE['userpass'];
         // всё хорошо, реконнект удался
        } else 
        {
           // реконнект не удался - переходим к форме логина
           header("Location: index.php");
           exit;
        }
   }
   if ($_SESSION['username'] == '' && $_COOKIE['username'] == '') {
     header("Location: index.php");
     exit;
   }

собственно проблема в том что переменная сесии $_SESSION['userpass'] тоже удаляется и сравнивать не получается... не с чем сравнивать ''

Это сообщение отредактировал(а) Sniper - 30.1.2009, 14:01


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
enof
Дата 30.1.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 
пять минут,код накину.
PM MAIL ICQ Skype   Вверх
enof
Дата 30.1.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Авторизация:
Код

<?php
//Обработчик формы ввода пароля\логина.
$user=$_POST['user'];        //Допустим,что поля не пустые и там 100% логин и пароль.
$pass=$_POST['pass'];

//    Тут идет сверка с базой данных.
if(логин и пароль правильные)
{
    $_SESSION['username']=$user;
    $_COOKIE['username']=$user;
    $_COOKIE['password']=$pass; //Пароль в открытом виде хранить не есть гуд.
}else{
    //Введены не правильные логин и пароль,пусть юзер вводит еще раз.
}
?>


Далее на всех страницах,где нужно проверить авторизацию:
Код

<?php
if(isset($_SESSION['username']))
{
    //Регистрация уже была пройдена до этого,ничего не надо проверять!
}elseif(isset($_COOKIE['username'],$_COOKIE['password'])){
    //Идет сверка с базой данных
    if(логин и пароль правильные)
    {    
        //Пишем в сессию логин.
        $_SESSION['username']=$_COOKIE['username'];
    }else{
        //В куках неправильные логин и пароль.Значит авторизация неудачна.
    }
}else
{
    //Ни в куках и в сессии ничего нет,значет авторизации не было.
}
?>

Цитата(Sniper @  30.1.2009,  13:59 Найти цитируемый пост)
собственно проблема в том что переменная сесии $_SESSION['userpass'] тоже удаляется и сравнивать не получается... не с чем сравнивать ''

Зачем хранить пароль в сессии?Он нужен только в куках в закодированном виде,чтобы авторизировать пользователя.

p.s.
А че сообщение не добавилось к предыдущему?

Это сообщение отредактировал(а) enof - 30.1.2009, 14:21
PM MAIL ICQ Skype   Вверх
Sniper
Дата 30.1.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Зачем хранить пароль в сессии?


ой ой ой... перепутал smile 

Цитата

if(isset($_SESSION['username']))

как же я забыл про существование isset АААААА smile 

Это сообщение отредактировал(а) Sniper - 30.1.2009, 14:45


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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