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
Форумы портала PHP.SU :: Версия для печати :: Авторизация
Форумы портала PHP.SU » » Вопросы новичков » Авторизация

Страниц (4): [1] 2 3 4 »
 

1. Hapson - 14 Июня, 2013 - 18:40:04 - перейти к сообщению
Здравствуйте.
Ну, собственно, начал учить PHP, а так как мой моск понимает исключительно практику, то решил писать сайт параллельно с чтением книг.
Так как понятия не имел, с чего начать, взял за основу вот это
Сейчас завис на авторизации админа.
В общих чертах, это как бы CMS будет. С админкой - все дела. Админка по аналогии с джумлой, а сайт аналог Drive2.ru. Короче это чисто практика для меня, не факт, что это будет жить. Мне главное писать самому.

Ну поехали...
Структура:
Спойлер (Отобразить)


Админка доступна по адресу http://site[dot]ru/admin
Открывается файл index.php
Спойлер (Отобразить)


Здесь подключается конфиг config.php (создается после установки... ну CMS что ли...)
Спойлер (Отобразить)


Далее fun.php - функции

Спойлер (Отобразить)


Далее аутентификация - файл auth.php

Спойлер (Отобразить)


Этот файл я переписал, немного изменив тот, что предлагал автор по вышеуказанной ссылке. Он предлагал вот что

Спойлер (Отобразить)


Я так думаю не нужно передавать в сессию логин и пароль. Мне кажется, что id вполне достаточно для этого. Или нет? Безопасен ли мой файл авторизации? Не обращайте внимания на отсутствие проверок полей - это потом.

Еще вот что не могу понять. Я вхожу в админку, затем нажимаю кнопку выйти, а потом жму кнопку назад в браузере. И тут я опять попадаю в админку и снова я авторизован. Как победить это? Как сделать чтобы при клике назад в браузере, я не попадал снова в админку.

PS
Ну и еще подскажите, если это можно объяснить в двух словах. Как можно реализовать вставку модулей в шаблон сайта. Типа как в джумле. Или здесь без классов никак?

Вот сам шаблон, как-то так

Спойлер (Отобразить)


А это шаблон админки, тут находится кнопка выйти

Спойлер (Отобразить)

(Добавление)
Да, вот что еще забыл.
Стоит ли использовать сессии для пользователей? Говорят они сильно грузят сервер... А куки тоже плохо.
2. VygVik - 14 Июня, 2013 - 21:39:28 - перейти к сообщению
Цитата:
Я так думаю не нужно передавать в сессию логин и пароль. Мне кажется, что id вполне достаточно для этого. Или нет? Безопасен ли мой файл авторизации? Не обращайте внимания на отсутствие проверок полей - это потом.

Еще вот что не могу понять. Я вхожу в админку, затем нажимаю кнопку выйти, а потом жму кнопку назад в браузере. И тут я опять попадаю в админку и снова я авторизован. Как победить это? Как сделать чтобы при клике назад в браузере, я не попадал снова в админку.


Так всего много)
Логин и пароль желательно передать, ведь на основании этого можно авторизоваться. Я думаю взломать можно любой сайт, дело за профессионалом.
После выхода с админки нужно завершить сессию, тогда нажимая в браузере назад вы не сможете войти в админку.
3. Master_pascal - 14 Июня, 2013 - 23:48:35 - перейти к сообщению
без куки и сессий регистрацию не сделаешь. гг , а зачем ты страницу ,где кнопка выйти, показал?
показывай чо там у тебя в exit.php
(Добавление)
тебе надо создать exit.php и сделать unset($_SESSION['login'])
4. esterio - 15 Июня, 2013 - 02:26:16 - перейти к сообщению
Master_pascal
вы в етом уверены? конешно так лучше но не надо так категорически

Hapson
очень много всего. вряли ктонибудь станет читать
5. teddy - 15 Июня, 2013 - 02:32:05 - перейти к сообщению
Master_pascal пишет:
без куки и сессий регистрацию не сделаешь

Регистрацию - сделает.

а файл отдельный для выхода создавать вовсе не нужно. Достаточно использовать GET параметр. Например www[dot]site[dot]ru/index.php?logout

PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['logout'])){
  2.     unset($_SESSION['login']);
  3.     header("Location: index.php");
  4.      exit;
  5. }
6. AlexAnder - 15 Июня, 2013 - 07:21:25 - перейти к сообщению

а для чего session_destroy() тогда? Не понял


ТС, возможно, не знает о существовании такого тега как SPOILER Нахмурился
7. DeepVarvar - 15 Июня, 2013 - 12:43:04 - перейти к сообщению
AlexAnder пишет:
session_destroy()
Для того, чтобы вообще её уничтожить. Будто её и не стартовали. Тогда даже при желании ты в неё ничего не запишешь. И например будут проблемы с капчей у гостей, если правильный ответ пишется в сессию.
8. AlexAnder - 15 Июня, 2013 - 14:53:48 - перейти к сообщению
DeepVarvar пишет:
AlexAnder пишет:
session_destroy()
Для того, чтобы вообще её уничтожить. Будто её и не стартовали. Тогда даже при желании ты в неё ничего не запишешь. И например будут проблемы с капчей у гостей, если правильный ответ пишется в сессию.

т.е. при логауте(нажатии на ссылку выйти) нужно ансетить идентификационные данные, а не уничтожать сессию?
9. vanicon - 15 Июня, 2013 - 15:38:46 - перейти к сообщению
Насколько я знаю session_destroy() уничтожает сессию (на стороне сервере), поэтому не всегда нужно уничтожать сессию, а достаточно просто удалить куку...
Ps Поправьте если что
10. LIME - 15 Июня, 2013 - 15:41:20 - перейти к сообщению
vanicon а если будет убита кука какой смысл сохранять файл сессии?
как он будет доступен?
11. vanicon - 15 Июня, 2013 - 15:43:32 - перейти к сообщению
Ну это если id сессии хранить в бд, хотя да смысла походу мало оставлять сессию в живых
12. DeepVarvar - 15 Июня, 2013 - 15:45:52 - перейти к сообщению
AlexAnder пишет:
т.е. при логауте(нажатии на ссылку выйти) нужно ансетить идентификационные данные, а не уничтожать сессию?
Ага Закатив глазки
13. vanicon - 15 Июня, 2013 - 15:48:28 - перейти к сообщению
DeepVarvar
Хм а почему?
14. AlexAnder - 15 Июня, 2013 - 15:57:00 - перейти к сообщению
DeepVarvar пишет:
AlexAnder пишет:
т.е. при логауте(нажатии на ссылку выйти) нужно ансетить идентификационные данные, а не уничтожать сессию?
Ага Закатив глазки

ну файл с данными же останется на сервере, или нет?
15. Hapson - 15 Июня, 2013 - 19:33:26 - перейти к сообщению
VygVik пишет:


Так всего много)
Логин и пароль желательно передать, ведь на основании этого можно авторизоваться. Я думаю взломать можно любой сайт, дело за профессионалом.
После выхода с админки нужно завершить сессию, тогда нажимая в браузере назад вы не сможете войти в админку.

Ну там же смысл в чем.

Сначала проверяется, есть ли в сессии "id" пользователя. Если есть, то из базы выбираются все данные этого "id". То есть, если "id" = 5, то из базы выбираются все данные на пользователя с "id" = 5 (логин, пароль, статус и id).
По задумке есть 4 статуса у пользователей: 0 - гость, 1 - админ, 2 - модер, 3 - юзер.
Далее проверяется, если в выбранных данных статус равен 1, значит это админ, можно показать админку.

Если в сессии "id" не было, тогда из базы выбираются данные согласно паре логин-пароль, которые ввел пришедший юзер.
Если в этих данных статус пользователя = 1, то значит это админ, если нет, значит не админ - отправляем юзера на главную, ему сюда нельзя.

Если пользователь нажал кнопку выход (<a href="?exit=ok">Выйти</a>) в админке, тогда удаляется "id" из сессии и уничтожается сессия.
Но почему-то при нажатии кнопки назад в браузере, сессия опять жива и "id" админа опять существует в сессии.
(Добавление)
Master_pascal пишет:
без куки и сессий регистрацию не сделаешь. гг , а зачем ты страницу ,где кнопка выйти, показал?
показывай чо там у тебя в exit.php
(Добавление)
тебе надо создать exit.php и сделать unset($_SESSION['login'])


Нету exip.php.
В админке есть <a href="?exit=ok">Выйти</a>
а в файле авторизации
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(!empty($_GET['exit']) == 'ok'){
  2.         unset($_SESSION['id']);
  3.         session_destroy();

 

Powered by ExBB FM 1.0 RC1