Результаты опроса: Какую информацию о пользователе необходимо передавать в сессиях?

Голосовавшие
3. Вы ещё не голосовали в этом опросе
  • только информацию необходимую для идентификации пользователя

    3 100.00%
  • полную информацию о пользователе

    0 0%
  • не понимаю о чем тут речь....

    0 0%
Показано с 1 по 6 из 6

Тема: Что хранить при аутентификации в сессиях?!!

  1. #1
    Пользователь
    Регистрация
    07.06.2007
    Сообщений
    35

    Что хранить при аутентификации в сессиях?!!

    Ну вообще, пыхчу я, кряхчу я, над очередным своим велосипедом и возник у меня следующий вопрос: какую инфу о пользователе следует хранить в сессиях?!!

    Допустим, у нас есть сущность user

    PHP код:
    CREATE TABLE IF NOT EXISTS `user` (
      `
    user_idint(11NOT NULL AUTO_INCREMENT,
      `
    user_namevarchar(100NOT NULL,
      `
    user_emailvarchar(50NOT NULL,
      `
    user_password_hashvarchar(40NOT NULL,
      `
    registration_dateint(11NOT NULL,
      
    PRIMARY KEY (`user_id`),
      
    UNIQUE KEY `user_email` (`user_email`)
    ENGINE=InnoDB  DEFAULT CHARSET=utf8
    Само собою, в сессиях непосредственный интерес представляет как минимум поле user_id, иначе то нам никак не определить пользователя.
    ! В принципе в данном случае уникальным так же является поле user_email, но его как первичный ключ мы не используем!

    Вернемся к сути самого вопроса, с небольшой перефразировкой: что, кроме user_id стоит хранить в сессиях?!
    Я сохраняю user_id и IP адрес, с которого произошла аутентификация.

    У меня так же есть необходимость в хранении информации об правах доступа активного пользователя, ее я так же храню в сессиях или же лучше каждый раз ее запрашивать из БД? При запросе тратим в среднем 0.03 c, в принципе не так критично, но все же....

    Очень хотелось бы услышать ваше мнение!
    Последний раз редактировалось Deusilla; 04.05.2011 в 20:43. Причина: опечатка

  2. #2
    Продвинутый
    Регистрация
    17.11.2006
    Сообщений
    6,976
    Записей в дневнике
    15
    Изображения
    533
    В идеале в сессиях надо хранить только информацию об аутентификации пользователя, то есть именно UserID и информацию для проверки сессии, в данном случае это IP адрес, можно добавить еще UserAgent для более строгой защиты.

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

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

    Например можно создать класс User у которого будет статический метод GetUser(@userID) и уже в это методе непосредственно заниматься получением данных из базы данных и созданием сущности User по этим данным. В будущем если станет актуальным вопрос производительности, этот метод можно будет расширить например поддержкой кэширования, что позволит значительно сократить время получения информации о пользователе.

  3. #3
    Пользователь
    Регистрация
    07.06.2007
    Сообщений
    35
    Цитата Сообщение от Admin Посмотреть сообщение
    ...можно добавить еще UserAgent для более строгой защиты.
    Вот с этим согласен, такая фишечка имеется, просто не была упомянута!

    Цитата Сообщение от Admin Посмотреть сообщение
    хранить информацию о правах, то пользователь может получить доступ к системе даже тогда когда у него уже нет прав на доступ.
    Вот на счет этого, не скажи. Сессии чистить надо! Просто, в случае, если, что то не так, мочим сессию, точнее часть, отвечающею за user и все! как тут пользователь получит права?!

    Цитата Сообщение от Admin Посмотреть сообщение
    ....путем абстракции объекта пользователь и интерфейса получения информации о пользователе, что поможет потом без проблем применять разные стратегии оптимизации.

    Например можно создать класс User у которого будет статический метод GetUser(@userID) и уже в это методе непосредственно заниматься получением данных из базы данных и созданием сущности User....
    Ну примерно так и сделал!

    Мое решение:

    Есть класс, назовем его UserAuth, он у умеет:
    1. Хранить информацию о авторизованом пользователе
    2. Производить авторизацию(вход/выход)
    3. Запоминать пользователя по IP и UserAgent
    4. Предоставлять инфу о пользователе (метод статический!!!)


    в принципе для скромных нужд без использования прав доступа он годится, но у него есть еще одна особенность, он охраняет данные о пользователе в статистических переменных, которые неизменны для всех объектов класса, что позволяет избежать множественной авторизации!

    А вот наследник класса UserAuth, назовем его UserAccess уже может оперировать правами, и так же хранит их и выдает через статические переменные и функции.

    Как тебе такое решение?

  4. #4
    Продвинутый
    Регистрация
    17.11.2006
    Сообщений
    6,976
    Записей в дневнике
    15
    Изображения
    533
    Я правильно понял, что авторизация подразумевает только одного активного, авторизованного пользователя?
    Странное решение.

  5. #5
    Пользователь
    Регистрация
    07.06.2007
    Сообщений
    35
    Цитата Сообщение от Admin Посмотреть сообщение
    Я правильно понял, что авторизация подразумевает только одного активного, авторизованного пользователя?
    Странное решение.
    ну а как еще? одновременно может быть авторизован только один!

    PHP код:
    class UserAuth
    {
         protected static 
    $_user_id null;

         public function 
    logIn($login$pass$remember)
         {
         
    // Авторизуется по параметрам
         
    }

    в $_user_id хранится идентификатор авторизованного пользователя(пардонте, не активного), из любого объекта класса мы обращаемся к одному и тому же пользователю!

    Или я чето не понимаю?!

  6. #6
    Новичок
    Регистрация
    12.11.2011
    Сообщений
    5
    Парни подкиньте мне учебничек по ПХП. хочу научится. Буду рад если с примерами и практикой. еще и по джаве тоже скиньте.

Похожие темы

  1. где фотки хранить?
    от Марта в разделе Просто общение
    Ответов: 9
    Последнее сообщение: 11.10.2007, 16:48

Рекомендуем

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  

SEO by vBSEO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94