2013-08-06 2 views
5

В настоящее время я создаю сайт, который очень ориентирован на базу данных, как Stack Overflow. Мой вопрос заключается в том, как обрабатывать сеансы, которые будут проходить через несколько серверов (я планирую использовать серверы AWS для автоматического масштабирования).Обработка сеансов для масштабируемости

В настоящее время я убежден, что не должен использовать аутентификацию форм для целей масштабируемости и скорости. Вместо этого у меня будет таблица в базе данных, называемая сеансами, которая хранит следующую информацию: SessionID, UserID, ExpDate, CreateDate, IP, Status («LogedIn», «LogedOut», «Истек»).

Моя самая большая забота - это безопасность с точки зрения куки-файлов и отсутствие опыта, чтобы увидеть сценарий бутылочной шейки, когда у меня много работы на сервере.

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

FYI: По тем же причинам я использую PetaPoco вместо Entity Framework, так как я смог сбрить около 600 мс, сделав это.

Благодарим за помощь!

+0

Не уклоняйтесь от известных средств аутентификации, потому что у вас есть ферма. Есть способы сделать эту работу. Липкие сессии работают лучше всего и проще всего кодировать, но для поддержки его требуется оборудование инфраструктуры. – Jay

ответ

2

Мне неизвестны какие-либо проблемы с масштабируемостью при использовании проверки подлинности с использованием форм. По сути, он шифрует токен авторизации в файл cookie, и cookie представляется на сервере по каждому запросу. Использование файлов cookie вместо сеанса in-process позволяет масштабируемость, поскольку она не привязана ни к одному конкретному серверу.

Шифрование использует значение machineKey, которое хранится на сервере, поэтому для нарушения шифрования потребуется захват machineKey.

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

Ваш подход к использованию хранилища сеансов по-прежнему требует использования файла cookie для хранения некоторого указателя на хранилище сеансов. В зависимости от вашей реализации, было бы легко угадать эту информацию и легко выдать себя за другого.

EDIT:

Поскольку вы работаете на AWS, я хотел бы предложить вам воспользоваться ElastiCache, чтобы уменьшить количество DB хитов.

+0

+1, очень хорошее объяснение, даже я это понял. –

+0

Насколько безопасна аутентификация форм и что она будет стоить в производительности? – Radar5000

+1

Простой ответ «очень». Также помогает, если вы используете встроенные функции членства, которые делают односторонний засоленный хеш (SHA) для хранения паролей в базе данных. Что касается производительности, вы будете делать шифрование один раз, когда пользователь регистрируется и дешифрует по каждому запросу. Я бы не стал беспокоиться о производительности этого, особенно если загрузка распределена по нескольким веб-серверам, что в вашем случае было бы. Еще одно предложение - использовать SSL, чтобы кто-то не мог прочитать куки-файл, если они каким-то образом сумеют завладеть им во время транзита (подумайте о горячей точке Starbucks). –

Смежные вопросы