Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Пишу систему авторизации. Несколько вопросов
Просмотров: 321
 
Ответов: 5
Пишу, вернее, модернизирую систему управления юзерами для сайта небольшого интернет-магазина. В процессе работы над алгоритмом возникли четыре вопроса:
1. Есть ли смысл при регистрации нового юзера посылать ему письмо, заставляя активировать аккаунт, пройдя по некой ссылке, или лучше обойтись без этого?
2. Допустим, юзер зарегистрирован. Имеет ли смысл в форме входа, кроме логина и пароля, предусмотреть чекбокс «Запомнить меня», или запоминать всех по умолчанию, сводя к минимуму разные вопросы?
3. При успешной авторизации я пишу в сессию логин и двойной хэш пароля из базы (в базе, само собой, хранится двойной хэш пароля), а также пишу в куку некий token для автологина:
$token = md5(time().$username);
setcookie('token', $token, time ( ) + 2592000, "/");
$res = $db->query("UPDATE users SET token = '".$token."' WHERE username = '".$username."'");
Разные учебные пособия, сайты и форумы по-разному решают эту задачу. В чем минусы моего решения? Имеет ли смыл добавлять «соль», например к хэшу пароля или в token:
define('MY_SALT', 'KEJ2FHE#WJFHW758');
4. При обращении к каждой страницы сайта я проверяю, есть ли данные сессии, а потом у меня идет обязательный запрос к базе данных, примерно такой:
if ( isset ( $_SESSION["username"] ) && isset ( $_SESSION["userpass"] ) ) {
$db->query("SELECT * FROM users
WHERE username = '".$_SESSION["username"]."'
AND userpass = '".$_SESSION["userpass"]."'
.....}
Но некоторые пособия и учебники делают просто: если есть данные сессии, показывают страницу, если нет — не пускают, при этом запроса к базе данных нет, например:
if(isset($_SESSION['user_data']))
$message[] = "Приветствуем Вас, ". htmlspecialchars($_SESSION['user_data']['login']) ."! Рады видеть Вас на сайте";.........................
Как на ваш взгляд более грамотно? Спасибо.
setcookie('token', $token, time ( ) + 2592000, "/");
$res = $db->query("UPDATE users SET token = '".$token."' WHERE username = '".$username."'");
$db->query("SELECT * FROM users
WHERE username = '".$_SESSION["username"]."'
AND userpass = '".$_SESSION["userpass"]."'
.....}
$message[] = "Приветствуем Вас, ". htmlspecialchars($_SESSION['user_data']['login']) ."! Рады видеть Вас на сайте";.........................
1. Только в том случае, если вам необходим этот адрес для его дальнейшего использования, потому как валидация в интернет-магазинах у нас, как правило, происходит по телефонному звонку — что позволяет удостовериться в наличии пользователя и заказа (почти 100%). По сути, адрес можно подтвердить и уже после работы с интернет-магазином и за это в ответ дать сладких плюшек каких-нибудь, а потом присылать рассылки с новыми поступления по направлениям которые ему интересны.
2. Есть смысл чекбокса по дефолту включенного, но если человек не захочет — он просто снимет галочку. Многие не продвинутые пользователи сейчас об этом не задумываются, приняв по дефолту то, что сайт их запоминает. А ещё рекомендую пробежаться по популярным сервисам типа однокласснки, вконтакт и т.п. и посмотеть как у них и не отсупать от этого — схожесть в визуальном плане и поведении стандартных наборов элементов управления является одним из озносных параметров дружественного интерфейса.
3. Рекомендовал бы привязаться не только к имени пользователя (или вобще НЕ к нему), а к данным браузера — имя пользователя то у сессии всегда одно и то же, а вот если к данным браузера привязаться, то утащив куки с сессией злодею надо будет подтасовывать и все идентификационные данные браузера.
4. По идее сессия и нужна для того, чтобы не лазить каждый раз за проверкой. Сейчас у вас бессмыслица — зачем проверять тот ли логин с паролем в базе из сессии, если в сессию вы сами их и положили? Каким образом они могут отличаться? Пользователю недоступно изменение данных сессии, это делает ваш скрипт.
всё что ниже — субъективно
1. для интернет магазина это лишнее. самое то использовать три варианта: заказ без регистрации, регистрация через openid, обычная регистрация.
2. имеет, это очень удобно. только title на чекбокс сделайте с коротким объеснением зачем это.
3. соль нужна для того что бы «усугубить» хеш, а самое главное для того что бы в базе был один хеш (а рядом соль) а в сессию писать уже с солью.
4. я обычно «гостю» ставлю в куку id=1 и пароль md5(rand()), а на страницах уже проверяю, если значение id больше 1 то делаю идентификацию, если 1 то нет.
не забывайте про mysql_escape()
1. Без активации мыла на первый взгляд проще и удобнее. Но думаю юзеру будет неприятно узнать, что он сделал опечатку в поле email, когда нужно будет восстановить пароль к учетке. Хотя тут тоже зависит от назначения вашего сервиса, может привязка к мылу как таковая особо и не нужна.
3. Используете свой велосипед? Зачем?
4. >проверяю, есть ли данные сессии, а потом у меня идет обязательный запрос к базе данных
вот из такого и вырастают чудо-скрипты, ставящие раком любой сервер. Тут запросик, там запросик. Не ленитесь, делайте по-человечески сразу, к тому же это и удобнее.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться