На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Как передавать факт логина при переходе от страницы к странице? , ASP. NET
    Допустим, у нашего сайта есть три страницы (условно, речь не о интернет-магазине):

    1) страница входа (там пользователь вводит логин и пароль);
    2) страница выбора товара;
    3) корзина.


    На первой странице по нажатию кнопки производится проверка наличия введенной пары логин+пароль в базе данных и, в случае нахождения такой пары, должна открыться страница №2 (выбор товара).

    Возник вопрос: а как передать странице №2 сведения о том, что ее просматривает _конкретный_ авторизованный пользователь.

    Были следующие идеи:

    1) передавать логин и пароль в зашифрованном виде как аргументы страницы через URL (System.Web.HttpUtility.UrlEncode(...)). Реально способ не подходит, т.к. пользователь скопирует ссылку из браузера другу - и тот, фактически, зайдет под чужим логином и паролем.

    2) то же самое, что вариант 1, но вместе с передачей в URL зашифрованного IP-адреса для последующего сравнения с свойством Request.UserHostAddress. Эффективность тоже представляется сомнительной, так как сейчас тысячи компьютеров выходят в инет через один и тот же IP провайдера.

    3) вариант 1 + куки на компе пользователя, куда при успешной авторизации на сайте писать некий контрольный ключ (и хранить этот же ключ в базе данных сайта для последующей сверки при открытии страниц).


    Пока что более или менее подходящим видится вариант 3. Есть небольшие опасения, что зашифрованные аргументы (логин и пароль) можно расшифровать, если получить от друга ссылку и загнать ее в C#.

    Может, что-то еще? Или есть другие, более цивилизованные варианты?

    Добавлено
    Дополнение. Если с первой на вторую страницу еще можно передать данные с помощью PreviousPage, то как быть с переходом от страницы с выбором товара в корзину, а затем обратно?
      Передавать идентификатор сессии, сессия хранится на сервере и создается/изменяется при логине (в самой сессии можно хранить промежуточные данные, например корзину).
      Передавать можно аналогично механизмам сессий в php - через куки и get/post.
      Для предотвращения кражи кук (и использования sid для аутентификации под другим юзером) можно навтыкать костылей типа хешей от useragent+соль+ip (ip тоже сомнительное решение), и при аутентификации сверять эти данные.

      ЗЫ "сессия" - говорю про обие понятия, а не про конкретные реализации механизма сессии
        Честно говоря, мало что понял :)) я веб-программированием занимаюсь первую неделю, пытаюсь понять основные механизмы. Общие понятия мне мало что говорят.
          В общем, уже традиционно отвечаю на свой вопрос сам :)))

          Для передачи данных между страницами удобно использовать коллекцию и объект Session.

          Порядок работы для поставленной задачи:

          1) имеем базу данных с таблицей зарегистрированных пользователей, где есть столбцы ID (уникальный порядковый номер пользователя), Login, Password
          2) страница идентификации пользователя находит в базе данных значение поля ID для введенной пары логин+пароль
          3) создаем значение, хранящее числовой идентификатор текущего пользователя, в коллекции Session:

          ExpandedWrap disabled
            Session["UserID"] = считанный_ранее_ID_из_базы_данных;


          4) на остальных страницах сайта в событии Page_Init сразу определяем, для какого именно пользователя отображать данные (и отображать ли вообще, если ID отсутствует):

          ExpandedWrap disabled
            номер_пользователя_в_базе_данных = Session["UserID"];




          Коллекция Session имеет тип object, т.е. может хранить любые объекты (типы данных). Названия переменных (в нашем случае "UserID") задаются произвольно.


          Если мы не хотим показывать страницу незалогиненным пользователям, то в событии Page_Init нужно устраивать проверку на наличие данных в Session["UserID"] и, если там ничего нет (Session["UserID"]==null), давать от ворот поворот, например, на страницу логина.


          Дополнительно при логине можно считывать значение Session.SessionID и использовать его в куках для сохранения сессии после закрытия браузер - это уникальный, длиной 140 битов (считается, что значения никогда не повторяются в реальности), номер сессии. Но до этого я пока не дошел.
          Сообщение отредактировано: SO -
            В общем, читать про Forms Authentication
              Uncle_Bob

              Я правильно понял, что предложенный мной метод вполне рабочий?


              Кстати, не посоветуешь книжку по ASP.NET с MVC4? Желательно, чтобы популярно было рассказано на примерах, как и что делается. Было бы идеально, если бы книжка была построена в виде пошаговой инструкции построения сайта того или иного вида. На примерах оно как-то проще понимается, чем голый технический текст типа MSDN.
                Цитата SO @
                Я правильно понял, что предложенный мной метод вполне рабочий?

                Рабочий, но велосипед...


                Цитата SO @
                Кстати, не посоветуешь книжку по ASP.NET с MVC4?

                А причем тут MVC? Пока вроде тут Web Forms...?

                Вообще не посоветую :lol:
                  Цитата Uncle_Bob @
                  Цитата SO @
                  Я правильно понял, что предложенный мной метод вполне рабочий?

                  Рабочий, но велосипед...


                  Цитата SO @
                  Кстати, не посоветуешь книжку по ASP.NET с MVC4?

                  А причем тут MVC? Пока вроде тут Web Forms...?

                  Вообще не посоветую :lol:

                  Ключевое слово - "пока".

                  Ну а по обычному ASP.NET?
                    www.asp.net
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0346 ]   [ 16 queries used ]   [ Generated: 2.05.24, 03:16 GMT ]