2016-02-14 3 views
2

В моем понимании, , когда сеанс инициализации для некоторых пользователей,Когда сеанс разрушен в рельсах?

сеанс получает хэш и session_id, который идентифицирует его.

ex. session[key]=value 
    session_id = 23f8fzsj2048j20j 

Теперь при выходе из пользователя, я знаю, что вы можете просто установить

session[:user_id] = nil 

Но что происходит с фактической сессии хэш?

Если я не ошибаюсь, если есть Пользователь A, B и C, каждому из них назначается уникальный сеанс, например, с пользователем A с session_id = 12345abc, пользователем B с session_id = 23456abc и т. Д. ,

Разве это не создает бесконечное количество хэшей сессии? Собирают ли они мусор, когда они не привыкают?

+1

Не используйте 'session [: user_id] = nil' для« выхода »пользователя. Используйте 'session.destroy'. – meagar

ответ

1

Я не уверен, что ты mean by session_id, но по умолчанию сеансы используют файл cookie, который сохраняется в браузере ваших пользователей.

Если вы хотите получить дополнительную ссылку на код, я предлагаю вам прочитать это, https://github.com/rails/rails/blob/3ac3760c69e6e6914c5ddae138856b3c82ac0f20/actionpack/lib/action_dispatch/middleware/session/cookie_store.rb, а затем перейдите к реализации Rack для файлов cookie.

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

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

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

+0

Итак, я подумал, что когда пользователь отправляет запрос, приложение rails создает хэши сессии, которые однозначно идентифицируются с некоторыми идентификаторами. Это то, что я имел в виду под session_id. Затем, всякий раз, когда пользователь отправляет запрос с куки-файлом, который имеет session_id и user_id, какие рельсы используют для идентификации хеша и используют user_id в качестве ключа, чтобы узнать, вошел ли пользователь в систему. Надеюсь, что я не ошибаюсь в допущениях Вот. Я? – innhyu

+1

Что вы говорите правильно, когда используете SessionStore 'ActiveRecord' или' CacheStore', у вас все еще есть файл cookie, который ссылается на то, что является вашим 'session_id', но место, где сами данные сохраняются и извлекаются, отличается. Здесь вы можете узнать больше об этом, http://guides.rubyonrails.org/action_controller_overview.html#session. – gmaliar

2

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

Сессии (по умолчанию) хранятся с использованием CookieStore. Существует нет данных на стороне сервера, все данные cookie шифруются и сохраняются в файле cookie. Браузер пользователя несет ответственность за очистку.

Вы можете использовать альтернативные механизмы хранения сеансов, такие как ActiveRecord sesssion store, который хранит данные сеанса в базе данных. Выполнение этого требует, чтобы вручную выбрать, когда рассмотреть запись «истек», и реализовать свою собственную очистку коды, опять же, они не автоматически «мусор»: How does Rails know when to delete a record from the `sessions` table?

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