Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.100.34] |
|
Сообщ.
#1
,
|
|
|
Допустим, у нашего сайта есть три страницы (условно, речь не о интернет-магазине):
1) страница входа (там пользователь вводит логин и пароль); 2) страница выбора товара; 3) корзина. На первой странице по нажатию кнопки производится проверка наличия введенной пары логин+пароль в базе данных и, в случае нахождения такой пары, должна открыться страница №2 (выбор товара). Возник вопрос: а как передать странице №2 сведения о том, что ее просматривает _конкретный_ авторизованный пользователь. Были следующие идеи: 1) передавать логин и пароль в зашифрованном виде как аргументы страницы через URL (System.Web.HttpUtility.UrlEncode(...)). Реально способ не подходит, т.к. пользователь скопирует ссылку из браузера другу - и тот, фактически, зайдет под чужим логином и паролем. 2) то же самое, что вариант 1, но вместе с передачей в URL зашифрованного IP-адреса для последующего сравнения с свойством Request.UserHostAddress. Эффективность тоже представляется сомнительной, так как сейчас тысячи компьютеров выходят в инет через один и тот же IP провайдера. 3) вариант 1 + куки на компе пользователя, куда при успешной авторизации на сайте писать некий контрольный ключ (и хранить этот же ключ в базе данных сайта для последующей сверки при открытии страниц). Пока что более или менее подходящим видится вариант 3. Есть небольшие опасения, что зашифрованные аргументы (логин и пароль) можно расшифровать, если получить от друга ссылку и загнать ее в C#. Может, что-то еще? Или есть другие, более цивилизованные варианты? Добавлено Дополнение. Если с первой на вторую страницу еще можно передать данные с помощью PreviousPage, то как быть с переходом от страницы с выбором товара в корзину, а затем обратно? |
Сообщ.
#2
,
|
|
|
Передавать идентификатор сессии, сессия хранится на сервере и создается/изменяется при логине (в самой сессии можно хранить промежуточные данные, например корзину).
Передавать можно аналогично механизмам сессий в php - через куки и get/post. Для предотвращения кражи кук (и использования sid для аутентификации под другим юзером) можно навтыкать костылей типа хешей от useragent+соль+ip (ip тоже сомнительное решение), и при аутентификации сверять эти данные. ЗЫ "сессия" - говорю про обие понятия, а не про конкретные реализации механизма сессии |
Сообщ.
#3
,
|
|
|
Честно говоря, мало что понял ) я веб-программированием занимаюсь первую неделю, пытаюсь понять основные механизмы. Общие понятия мне мало что говорят.
|
Сообщ.
#4
,
|
|
|
В общем, уже традиционно отвечаю на свой вопрос сам ))
Для передачи данных между страницами удобно использовать коллекцию и объект Session. Порядок работы для поставленной задачи: 1) имеем базу данных с таблицей зарегистрированных пользователей, где есть столбцы ID (уникальный порядковый номер пользователя), Login, Password 2) страница идентификации пользователя находит в базе данных значение поля ID для введенной пары логин+пароль 3) создаем значение, хранящее числовой идентификатор текущего пользователя, в коллекции Session: Session["UserID"] = считанный_ранее_ID_из_базы_данных; 4) на остальных страницах сайта в событии Page_Init сразу определяем, для какого именно пользователя отображать данные (и отображать ли вообще, если ID отсутствует): номер_пользователя_в_базе_данных = Session["UserID"]; Коллекция Session имеет тип object, т.е. может хранить любые объекты (типы данных). Названия переменных (в нашем случае "UserID") задаются произвольно. Если мы не хотим показывать страницу незалогиненным пользователям, то в событии Page_Init нужно устраивать проверку на наличие данных в Session["UserID"] и, если там ничего нет (Session["UserID"]==null), давать от ворот поворот, например, на страницу логина. Дополнительно при логине можно считывать значение Session.SessionID и использовать его в куках для сохранения сессии после закрытия браузер - это уникальный, длиной 140 битов (считается, что значения никогда не повторяются в реальности), номер сессии. Но до этого я пока не дошел. |
Сообщ.
#5
,
|
|
|
В общем, читать про Forms Authentication
|
Сообщ.
#6
,
|
|
|
Uncle_Bob
Я правильно понял, что предложенный мной метод вполне рабочий? Кстати, не посоветуешь книжку по ASP.NET с MVC4? Желательно, чтобы популярно было рассказано на примерах, как и что делается. Было бы идеально, если бы книжка была построена в виде пошаговой инструкции построения сайта того или иного вида. На примерах оно как-то проще понимается, чем голый технический текст типа MSDN. |
Сообщ.
#7
,
|
|
|
Цитата SO @ Я правильно понял, что предложенный мной метод вполне рабочий? Рабочий, но велосипед... Цитата SO @ Кстати, не посоветуешь книжку по ASP.NET с MVC4? А причем тут MVC? Пока вроде тут Web Forms...? Вообще не посоветую |
Сообщ.
#8
,
|
|
|
Цитата Uncle_Bob @ Цитата SO @ Я правильно понял, что предложенный мной метод вполне рабочий? Рабочий, но велосипед... Цитата SO @ Кстати, не посоветуешь книжку по ASP.NET с MVC4? А причем тут MVC? Пока вроде тут Web Forms...? Вообще не посоветую Ключевое слово - "пока". Ну а по обычному ASP.NET? |
Сообщ.
#9
,
|
|
|
www.asp.net
|