Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не могу разобраться с куками и сессиями

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pro_xaoc
Отправлено: 07 Ноября, 2011 - 17:17:09
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Приветствую Всех! В общем у меня стала такая проблема: у меня в скрипте условие проверки того, как пользователь авторизовался (с помощью кук или сессии), работает наоборот, т.е. ниже код ...
PHP:
скопировать код в буфер обмена
  1. $db = $this->db;
  2. $user_login = $_POST['login'];
  3. $user_pass = md5($_POST['pass']);
  4. $res_query = $db->prepare("SELECT `akk`,`password` FROM `users` WHERE `akk`=?");
  5. $res_query->execute(array($user_login));
  6. $matches = $res_query->fetch(PDO::FETCH_NUM);
  7.                
  8. if($_POST['remember'] == 'remember'){    //c помощью пост запроса мне летят данные чекбокса, по условии, если значение чекбокса равно remember, то должно быть истина, а у меня все наоборот
  9.         if (($user_login == $matches[0]) & ($user_pass == $matches[1])){
  10.                 $_SESSION['login'] = $user_login;
  11.                 $_SESSION['pass'] = $user_pass;
  12.                 echo "Авторизовано с помощью сессии<br>";
  13.                 echo $_SESSION['login']."<br>".$_SESSION['pass'];
  14.         }else{
  15.                 header("Location: $this->site");
  16.         }
  17. }else{
  18.         if (($user_login == $matches[0]) & ($user_pass == $matches[1])){
  19.                 setcookie('login',$user_login,time()+111111111,'/');
  20.                 setcookie('pass',$user_pass,time()+111111111,'/');
  21.                 echo "Авторизовано с помощью кук<br>";
  22.                 echo $_COOKIE['login']."<br>".$_COOKIE['pass'];
  23.         }else{
  24.                 header("Location: $this->site");
  25. }
  26. }

есть какие идеи, из-за чего так? Заранее спасибо за любую помощь.
P.S. Я конечно могу тоже условие сделать наоборот, но хотелось бы узнать почему так проиходить
 
 Top
caballero
Отправлено: 07 Ноября, 2011 - 19:07:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




что за фигня -"авторизовался при помощи сессии"?

результат авторизации всегда в сессии
в куках можно хранить id юзера (а не логин с открытым всему миру паролем) чтобы автоматически авторизовать его при открытии браузера


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sKaa
Отправлено: 07 Ноября, 2011 - 22:20:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Сессии в большинстве случаев сами по себе механизм основанный на куках и хранятся они в основном там-же..

Хешировать пароль и хранить в куках.
Когда пользователь заходит на страницу сравнивать хеш из базы и хеш из куков.

попробуй что-то типо echo $_POST['remember'];
скорей всего там просто приходит true или 1
if($_POST['remember'] == true){
 
 Top
pro_xaoc
Отправлено: 08 Ноября, 2011 - 10:41:30
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




caballero, надпись "авторизовался при помощи сессии", я поставил специально для проверки, чтобы посмотреть, с помощью чего пользователь авторизуется.
Кое-что уточню, авторизация с помощью сессии и кук нужны мне для того, чтобы пользователь мог заходить на сайт на одну сессию(с использованием сессии) или на долго (с использованием кук). На форме авторизации есть чекбокс "Запомнить", ее значение тоже отправляется при сабмите. Теперь по значению этого чекбокса я выбираю, с помощью кук надо авторизовать или с помощью сессии.
sKaa, ни 1 ни true мне не помогли. Ясно что условие не верно я составил. Вот как это теперь можно сделать?
 
 Top
sKaa
Отправлено: 08 Ноября, 2011 - 11:29:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Выложи сюда форму которой отправляешь запрос, я тебе помогу
 
 Top
caballero
Отправлено: 08 Ноября, 2011 - 11:30:16
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Сессии в большинстве случаев сами по себе механизм основанный на куках и хранятся они в основном там-же..


на чем работают сессии забота сервера, а данные сессий хранятся всегда на сервере

Цитата:
Вот как это теперь можно сделать?

так как я напиисал и так как делают в большинстве случаев - запоминаешь в куках идентификатор пользователя их базы. И все. Если он есть в куках вместо показа формы логина просто пихаешь его в сессию и работаешь

нечего в куках делать логину и паролю

(Отредактировано автором: 08 Ноября, 2011 - 11:30:55)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sKaa
Отправлено: 08 Ноября, 2011 - 11:56:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


caballero пишет:
так как я напиисал и так как делают в большинстве случаев - запоминаешь в куках идентификатор пользователя их базы. И все. Если он есть в куках вместо показа формы логина просто пихаешь его в сессию и работаешь

тоесть любой кто поглядит у себя куки, увидит там индификатор пользователя и поменяет его автоматом зайдет под чужим логином????

бред какой-то )))
зачем тогда форма логина и пароля? pro_xaoc делай вместо неё форму :
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form ... >
  3. Введите ваш ID : ) <input type=text >
  4. <input type=submit >
  5.  

Пользователь зашел на сайт, ввел свой ID, ну или не свой )) и сидит курить трубку как у шерлока.
 
 Top
caballero
Отправлено: 08 Ноября, 2011 - 12:15:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
тоесть любой кто поглядит у себя куки, увидит там индификатор пользователя и поменяет его автоматом зайдет под чужим логином????


а чем лучше наоборот - чужой сядет за комп и зайдет под твоим логином даже не напрягаясь с круто захешированым паролем? Хочешь безопасности - не далай автоматическое залогинивание.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
sKaa
Отправлено: 08 Ноября, 2011 - 12:23:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


тут вопрос в другом, даст пользователь себя обмануть или нет таким образом.
для этого человек и делает чекбокс в форме "Запомнить меня"
если пользователь уверен что за его комп не сядет чужой способный подменить куку с целью войти на сайт то он поставит галочку, если не уверен, пароль сохранится в сессии и будет навсегда утерян как только пользователь закроет браузер.

имхо это общепризнанный способ авторизации. тут у пользователя хотя бы есть выбор как себя обезопасить.
в твоем способе вообще беда, любой сможет войти в систему, смысл тогда вообще делать авторизацию???
(Добавление)
Кстати caballero видел твой фреймвёрк! Респект!

(Отредактировано автором: 08 Ноября, 2011 - 12:24:15)

 
 Top
caballero
Отправлено: 08 Ноября, 2011 - 12:37:26
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
тут вопрос в другом,

вопрос вообще то вполне конкретный если по теме. Человек не может сориентироватся как это вообще сделать.
Пусть сначала хотя бы сделает с тупым id юзера. Потом можно уже придумывать что там с секюрити.

Цитата:
видел твой фреймвёрк! Респект!

спасибо. Все никак хватает времени доделать демонмтрационную CMS чтобы был наглядный пример как можно сделать реальный сайт.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
pro_xaoc
Отправлено: 08 Ноября, 2011 - 14:54:00
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Извините, что долго не мог ответить, на работе был. В общем, народ)), я выяснил в чем же была причина)). Переосмыслив и несколько раз прочитав код, пришел к выводу, что там все правильно Улыбка . Ну это же ясно, смотрим на код и я прокомментирую ГДЕ и ЧТО:
PHP:
скопировать код в буфер обмена
  1. $db = $this->db;
  2. $user_login = $_POST['login'];
  3. $user_pass = md5($_POST['pass']);
  4. $res_query = $db->prepare("SELECT `akk`,`password` FROM `users` WHERE `akk`=?")$res_query->execute(array($user_login));
  5. $matches = $res_query->fetch(PDO::FETCH_NUM);
  6.                
  7. if($_POST['remember'] == 'remember'){    //Если к нам отправляются пост запросы с чекбокса, то это значит что мы должны авторизоваться с помощью КУК! а не сессией, а я делал наоборот
  8.         if (($user_login == $matches[0]) & ($user_pass == $matches[1])){
  9.                 $_SESSION['login'] = $user_login;
  10.                 $_SESSION['pass'] = $user_pass;
  11.         }else{
  12.                 header("Location: $this->site");
  13.         }
  14. }else{
  15.         if (($user_login == $matches[0]) & ($user_pass == $matches[1])){
  16.                 setcookie('login',$user_login,time()+111111111,'/');
  17.                 setcookie('pass',$user_pass,time()+111111111,'/');
  18.         }else{
  19.                 header("Location: $this->site");
  20. }
  21. }

В общем надо код с ELSE перенести в блок IF и наоборот. Во я дурак Хорошо , но странно что никто не заметил Радость Спасибо всем за участие!
P.S. caballero, да, ты прав насчет хранения в куках айди пользователя (сам как-то не додумался), но как говорил sKaa, если кому-то надо авторизоваться он сам должен понять, надолго ли он заходит или на некоторое время.
Но все же, кук он может же удалить с помощью кнопки ВЫХОД и все! Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB