Nano Hash - криптовалюты, майнинг, программирование

Разница между session[:food] и cookies.permanent[:food]

в чем разница между session[:food]="pizza" и cookies.permanent[:food]=pizza?
Я попытался прочитать документацию по рельсам, и там написано:

В Rails 2 появилось новое хранилище сеансов по умолчанию, CookieStore. CookieStore сохраняет хэш сеанса непосредственно в файле cookie на стороне клиента.

Тогда я не понимаю, если session[:food] сохраняется в файле cookie, а cookie.permanent[:food] сохраняется, какая разница?


  • вы можете изменить хранилище сеансов, может отличаться от файлов cookie 09.11.2013

Ответы:


1

Я рекомендую вам попробовать, данные сеанса закодированы base64 в файле cookie (rails 3) или в зашифрованном файле cookie (rails 4). Используйте такой инструмент, как надстройка Firefox «Web Developer Extension» (WDE), у него есть пункт меню cookie, используйте его для удаления всех файлов cookie для вашего локального сайта, а затем добавьте свой код в действие контроллера.

session[:food] = "pizza"
cookies.permanent[:food] = "pizza"

Теперь просмотрите файлы cookie с помощью WDE.

Name    food
Value   pizza
Host    localhost
Path    /
...

против сессии

Name    _session_name # (this value set in config/initializers/session_store.rb)
Value   a_base_64_value
Host    localhost
Path    /    
...

теперь откройте консоль rails и декодируйте значение сеанса

$ rails console
> Base64.decode64('value from session')
# works in rails 3

При использовании rails 4 файл cookie шифруется, а не просто кодируется, см. http://cowbell-labs.com/2013-04-10-decrypt-rails-4-session.html

после расшифровки или декодирования это выглядит примерно так

{
  "session_id"=>"xxxxx", 
  "user_return_to"=>"/", 
  "flash"=>{
    "discard"=>[:alert], 
    "flashes"=>{
      :alert=>"You need to sign in or sign up before continuing."}
    }, 
  "food"=>"pizza", 
  "_csrf_token"=>"xxxxx"
}

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

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

09.11.2013

2

если вы делаете session[:food] , вы используете традиционный сеанс Rails: этот объект сеанса делает ваше значение "пицца" доступным со страницы на страницу, сохраняя его в cookie, срок действия которого истекает в браузере close (что означает, что если вы закроете браузер, ваша сессия[:food] будет уничтожена)

Когда мы говорим о постоянных, мы говорим о постоянных сеансах, так что же означает?

постоянный сеанс - это постоянный файл cookie, который все еще существует («навсегда»), даже если вы закрываете браузер, и не истекает, только если вы явно истечете срок его действия или удалите его.

но как сделать файл cookie, который все еще существует «навсегда»?

если я говорю «навсегда», это потому, что это сложно, и способ сделать это - установить срок действия файла cookie в течение длительного времени, например, через 20 лет или 60 лет .... вот так:

cookies[:remember token] = { value: "pizza", expires: 20.years.from now.utc }

Этот шаблон установки файла cookie, срок действия которого истекает через 20 лет, стал настолько распространенным, что Rails добавил специальный постоянный метод для его реализации, так что мы можем просто написать:

cookies.permanent[:food] = "pizza"

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

надеюсь, это поможет вам

09.11.2013
  • Хорошее объяснение! 16.09.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

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