2012-11-08 21 views
7

Tôi đang làm việc với session[:hash_name] bằng ruby ​​trên đường ray để giữ thông tin phiên như tên người dùng và nội dung.Đóng phiên và chuyển hướng để đăng nhập vào Ruby on Rails

Tôi đang cố gắng tìm cách hết hạn phiên này mà không cần người dùng phải đăng xuất. Đặc biệt trong hai trường hợp: sau một thời gian cần hết hạn và khi người dùng đóng trình duyệt.

Cho đến nay tôi đã tìm thấy thông số another được gọi là cookies[:hash_name] có thể hết hạn sau một thời gian. Nhưng tôi không chắc chắn làm thế nào để kiểm tra tham số này trong mọi yêu cầu của người dùng và sau đó gọi reset_session. Khi phiên được đặt lại, tôi cần chuyển hướng người dùng đến trang đăng nhập.

Bất kỳ đề xuất nào để giải quyết 2 vấn đề này đều được đánh giá rất cao.

Trả lời

5

Bạn có thể lưu phiên làm việc trong một cookie, mà là một cookie phiên theo mặc định (có nghĩa là nó sẽ biến mất khi người dùng đóng trình duyệt), và thêm một thời gian hết hạn sử dụng :expire_after.

Điều này có thể được định cấu hình trong config/initializers/session_store.rb. Ví dụ:

Yourapp::Application.config.session_store :cookie_store, 
             key: 'your_session_id', 
             expire_after: 45.minutes 
1

Cũng khá chắc chắn rằng nếu bạn chạy session.delete(:hash_name) sẽ hủy phiên, tuy nhiên, bạn không nên cố gắng xây dựng hệ thống xác thực của riêng mình, đặc biệt là khi bạn mất nhiều giờ để xây dựng chức năng cơ bản nhất , trong khi một giải pháp được xây dựng sẵn có thể được cài đặt trong 20 phút. Không chỉ vậy, nhưng các giải pháp được xây dựng trước có lẽ là hai lần như an toàn như bất cứ điều gì bạn có thể tự nấu ăn vì nó đã được kiểm tra và thử nghiệm bởi vô số các nhà phát triển.

Tôi thực sự khuyên bạn nên sử dụng tính năng xác thực. Với việc nghĩ bạn có các phương thức như sign_out(current_user), điều này rõ ràng là dấu hiệu của người dùng đã đưa ra yêu cầu. Hãy nhìn vào devise's github page

Tất cả phải mất là gem install devise, thêm nó vào gemfile của bạn, và sau đó chạy

rails g devise:install User # or whatever model name

Và họ xử lý phần còn lại

+0

Cảm ơn bạn, tôi sẽ khám phá tùy chọn sử dụng thiết lập, nhưng hiện tại tôi cần một trình điều khiển phiên đơn giản hết hạn sau một thời gian. Trả lời tôi nhận được bởi "Old Pro" – marimaf

0

Tôi đoán bạn đang sử dụng tùy chỉnh của riêng bạn Phương pháp xác thực. Vì vậy, ví scenario1 (tức là hết hạn phiên sau một số lần), bạn có thể làm điều gì đó tương tự để đưa ra dưới đây:

def create_session 
    if session[:hash_key] 
    destroy_session if session[:last_login] < 10.minutes.ago 
    session[:last_login] = Time.now 
    else 
    ... authenticate 
    session[:last_login] = Time.now 
    end 
end 

def destroy_session 
    reset_session 
end 

Đối scenario2 (tức là trên trình duyệt đóng), bạn có thể gọi xử lý sự kiện sử dụng jquery và có thể làm một cái gì đó như dưới đây:

$('window').unload(function(){ 
    //call to destroy session method 
}); 
Các vấn đề liên quan