Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

Trong bài viết trước, tôi đã hướng dẫn cách lưu session vào Redis Server trong Ruby On Rails. Lý do cho việc này là vì Rails phiên bản 5 mặc định lưu session vào cookie trên trình duyệt của máy khách. Tuy nhiên, việc này mang theo một số rủi ro về bảo mật, và bạn bị giới hạn về kích thước dữ liệu, không thể lưu nhiều hơn 4kb, vì trình duyệt chỉ cho phép lưu trữ tối đa 4kb trên cookie.

Trong bài viết này, tôi sẽ tiếp tục hướng dẫn một phương pháp khác để lưu trữ session, đó là lưu session vào cơ sở dữ liệu.

Tiền đề của bài viết này:

Vì Rails 5 hỗ trợ cả MySQL, PostgreSQLSQLite nên bài viết này có thể áp dụng tương tự với PostgreSQL và SQLite.

Hướng dẫn lưu session trên database

1. Thêm gem hỗ trợ “activerecord-session_store

Sửa file Gemfile, thêm dependency sau:

# Database session store
gem 'activerecord-session_store'

– Chạy command sau để update gem cho Rails

bundle update

Nếu update thành công thì ta sẽ có thông tin về gem như bên dưới:

2. Tạo bảng lưu trữ session trong CSDL

– Sử dụng command sau để generate ra các file dùng để migrate tạo bảng session.

rails generate active_record:session_migration

Nó sẽ tạo ra 1 file lưu trong thư mục db/migrate/ của ứng dụng Rails, chứa các thông tin để tạo bảng session. VDdb/migrate/20180708074828_add_sessions_table.rb

– Nếu chạy lệnh migrate để tạo bảng session ngay lúc này thì có thể gây ra lỗi sau:

StandardError: An error has occurred, all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

class AddSessionsTable < ActiveRecord::Migration[4.2]

Để khắc phục lỗi này các bạn sửa file xxx_add_sessions_table.rb vừa tạo ra, thêm version [5.2] như sau:

class AddSessionsTable < ActiveRecord::Migration[5.2]
  def change
    create_table :sessions do |t|
      t.string :session_id, :null => false
      t.text :data
      t.timestamps
    end

    add_index :sessions, :session_id, :unique => true
    add_index :sessions, :updated_at
  end
end

Sau đó chạy command để tiến hành tạo bảng session

rake db:migrate

Nó sẽ tạo ra bảng session có cấu trúc như sau:

3. Cấu hình Rails 5 sử dụng database (ActiveRecord) để lưu trữ session

Thêm file config/initializers/session_store.rb có nội dung như sau:

Rails.application.config.session_store :active_record_store, :key => '_my_app'

Vậy là bạn đã thành công trong việc tổ chức lưu session vào trong database rồi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *