Управление сеансами в Node.js? [закрыто]


101

Как лучше всего управлять переменными сеанса в Node.js? Есть ли библиотека?

Ответы:


95

Вы можете сделать это очень легко, используя:

  • Подключиться: http://senchalabs.github.com/connect/

    Connects похож на Rack in Ruby. Это дает вам дополнительный уровень, где вы можете «поиграть» с аутентификацией, сеансами, файлами cookie и прочим.

Другой вариант - использовать фреймворки:

  • Express.js: http://expressjs.com/

    Кажется, это наиболее часто используемый фреймворк node.js. Походит на Sinatra для Ruby и работает поверх Connect.

  • Гедди: http://geddyjs.org/

    Если вы хотите создавать более сложные веб-приложения, вы выберете Geddy. Это похоже на Rails для Ruby.


Что предлагает Гедди помимо экспресса? - Такая же разница, как у Sinatra и Rails?
— Майкл

1

4
Я думаю, вам следует упомянуть, что Express построен на основе Connect - любые функции или дополнения, совместимые с Connect, будут работать с Express.
— Джонатан Дюмен,


14

Просто выгрузите его в memcache или какой-нибудь другой механизм кеширования. Я бы не стал обременять ваши серверы подобными вещами. Какой смысл в супер-экономичном веб-сервере, который должен все запоминать.

Я бы также попытался разработать ваш сайт как приложение, а не как веб-сайт, или рассматривать ваш веб-сайт как приложение, использовать замечательные функции html5, такие как локальное хранилище / локальные базы данных, и сократить объем трафика между сервером и клиентскими машинами. .

Если все остальное не помогает (или сайт маленький), то что вам мешает написать собственный класс сеанса. Не так уж и сложно. Особенно, если это что-то типа памяти. Добавьте логику таймера для тайм-аута сеансов, и готово. Блин, на динамическом языке, таком как JavaScript, должно быть подпруга.

Структура должна быть словарем с ключом, являющимся сеансом, а значением, являющимся объектом, содержащим детали последней связи и возможности (для обеспечения доступа к определенным функциям). Добавьте функцию развертки, чтобы очистить старые сеансы, срок действия которых истек. и бинго. Базовый сеансовый сервис. базовая проверка на "является ли сеансовый ключ в списке ... да / нет ... получить подробности" ... и я думаю, что это все .... или есть ли какая-то функция, которую мне не хватает.

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


16
По моему опыту, каждый раз, когда вы добавляете новый сторонний инструмент, вы привязываете себя к этой третьей стороне на срок службы разрабатываемого вами продукта. Это плохо, с отсутствием контроля и понимания чьих-либо представлений о хорошем коде, который был помещен в черный ящик, очень трудно справиться, когда что-то идет не так (это всегда происходит) в вышеупомянутом черном ящике. Вы найдете множество заявлений об отказе от ответственности, приложенных к сторонним лицензионным соглашениям, «использование на свой страх и риск» - это то, что я вижу часто. Пески времени действительно быстро меняются, и то, что кто-то говорит, что код 1.0, больше не означает «домкрат».
— WeNeedAnswers

6
Если вы можете программировать код самостоятельно и, что наиболее важно, понимать код, и код можно разработать в разумные сроки, зачем вам использовать сторонний инструмент? И я доверяю всему написанному мной коду гораздо больше, чем какой-либо третьей стороне. Я инженер, а не художник, я создаю код, который иногда ломается, но никогда не рушится. Код, который не был протестирован, не может быть оправдан. С помощью таких инструментов, как интеграционное тестирование, модульное тестирование, регрессионное тестирование, какое оправдание вы используете, чтобы сказать, что ваш код не был протестирован? Больше верьте в свои таланты. Вы так же хороши, как и любая третья сторона.
— WeNeedAnswers

10
В ваших аргументах так много дыр, что я даже не знаю, с чего начать. 1) Зачем использовать сторонний инструмент: для экономии времени и энергии. 2) Открытый исходный код! = Без бренда. Express / Connect создаются командами, и их работа проверена большим сообществом. Они не «какой-то ребенок». 3) На изобретение колес нужно время. Может быть, ваше время свободно, а у большинства людей нет. 4) Вы никогда не узнаете каждый винт, болт и зажим. Все современное программное обеспечение построено на фреймворках, и любой человек может знать все до мелочей. Честно говоря, я не верю, что с таким мнением можно стать профессиональным разработчиком.
— Kyeotic

6
Каркасы - это не «серебряные пули». Когда вы программируете против фреймворка, вы позволяете кому-то другому принимать за вас контроль над важными решениями по коду. Конечно, вы это видите? Эти однажды принятые важные решения очень трудно отследить, если Framework слишком всеобъемлющий, тогда он будет принимать все основные решения за вас. Использование фреймворков также скрывает фактическое программирование. Определите свою интерпретацию Framework, существует более одного типа Framework. Некоторые фреймворки настолько интегрированы в язык программирования, что я бы назвал их системами программирования.
— WeNeedAnswers

5
Я никогда лично вас не оскорблял, я сказал, что в ваших аргументах есть дыры, а потом выровнял их. Вы! = Ваш аргумент. Когда я сказал, что, честно говоря, не верю, что с таким мнением можно стать профессиональным разработчиком, я имел в виду общее «вы», а не конкретно вас. Ваше мнение о фреймворках игнорирует тот факт, что все современное программное обеспечение их использует. Я стою на своей позиции, и это никуда не денется. Я согласен с принятым ответом, что использование Express / Connect - правильный путь. Отсюда и моя защита Express.
— Kyeotic 04

13

nodejs предоставляет базовый http API. http не имеет состояния, и идеи сеансов и переменных сеанса существуют в рамках / протоколах, построенных поверх http. http://en.wikipedia.org/wiki/Session_%28computer_science%29

Взгляните на http://geddyjs.org/ или http://expressjs.com/ в качестве примеров веб-фреймворков, построенных с помощью узла, обеспечивающего сеансы.


Спасибо, посмотрю в экспресс.
— Тимми

6

Ответ Дональда хорош - как только вы попадете в луковицу промежуточного программного обеспечения подключения, вам нужно будет принять решение о том, какой тип хранилища сеансов использовать. По умолчанию в Express используется MemoryStore, и он не предназначен для производственного использования. Вот некоторые из вариантов:

Mongo https://github.com/mikkel/express-session-mongo - обязательно используйте параметр native_parser: false

Redis https://github.com/visionmedia/connect-redis - очень хорошо, но если вы еще не используете Redis для публикации / подписки или хранилища, это может быть не идеально.

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


3
Я хочу сосредоточиться на «По умолчанию в экспрессе используется MemorySrote, и он не предназначен для производственного использования». Зайдите на engineering.linkedin.com/nodejs/… и прочтите пункт 7.
— guiomie

4
Это интересно, как бы вы управляли разрешениями пользователей, если бы не поддерживали сеансы?
— Коста,

2

Если вы ищете серьезную веб-разработку с использованием Node.js, используйте платформу Express ; он поддерживает сеансы.

Создайте проект Express с параметрами --sessions.

$ express --sessions

Чтобы установить Express:

$ npm install express -g

Больше не поддерживается. Вы должны добавить cookie-sessionк своей package.josnработе.
— Виктор Шредер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.