2010-09-26 31 views
5

Tôi đang chạy Rails 3 được định cấu hình để sử dụng memcached cho phiên lưu trữ. Tôi có các thiết lập sau:Khóa phiên giá quá dài cho memcached

development.rb

config.cache_store = :mem_cache_store

session_store.rb

Foo::Application.config.session_store :mem_cache_store, :key => '_foo_session'

tôi có thể bắt đầu tốt ứng dụng, khi tôi đi đến bất kỳ trang Tôi nhận được lỗi sau:

ArgumentError (key too long "rack:session:__really_long_session_key__"):

Tôi nhận thấy giới hạn trên khóa ghi nhớ là 255. Làm cách nào để khắc phục sự cố này hoặc tôi đang làm điều gì đó sai?

Trả lời

9

Bạn gần như chắc chắn sẽ thấy điều này vì bạn đang chuyển từ cửa hàng cookie sang memcached. Trình duyệt của bạn vẫn có cookie phiên cũ, với ID dài. Bạn cần xóa cookie này khỏi trình duyệt của mình và sự cố sẽ biến mất.

Nếu bạn đang chuyển từ cửa hàng cookie sang memcached trên một trang web sản xuất, điều này sẽ là một vấn đề bởi vì bạn không có quyền kiểm soát đối với các trình duyệt của người dùng. Có thể bạn sẽ cần phải thay đổi khóa phiên để tránh các sự cố trong trường hợp này.

0

Nếu "khóa" của bạn dài hơn 255 ký tự, có vẻ như bạn đang làm điều gì đó sai. Tại sao khóa phiên của bạn dài? Có gì sai với MD5 hoặc SHA1?

+0

Tôi dường như không thể tìm ra khóa phiên này đến từ đâu. Tôi không có khóa phiên đó được hiển thị trong lỗi được chỉ định ở bất kỳ đâu trong ứng dụng của tôi. Không phải là ': key =>' _foo_session'' được coi là chìa khóa? –

+0

@Jay Bala - Tôi không chắc chắn nơi nó được đặt .. Tôi chưa bao giờ sử dụng Rack –

1

Có thể bạn đã chuyển từ cửa hàng cookie hoặc bạn chạy các ứng dụng lưu trữ phiên cookie khác trên cùng một miền (ví dụ: localhost) không?

Trong trường hợp này, cửa hàng phiên cookie chịu trách nhiệm cho chuỗi session_id lớn (vì nó thực sự lưu trữ toàn bộ phiên trong đó). Chỉ cần xóa cookie phiên của bạn và bạn vẫn ổn.

Các vấn đề liên quan