tld_length 在 Rails session_store 與 HTTP URL 的設定

2016-10-31 09:54:40来源:作者:kerkerj人点击

第七城市

工作上 rails 在每個 stage 的 domain 長度都不太一樣

例如 production 是 example.com,staging 是 kerkerj.staging.example.com

MyApp::Application.config.session_store :redis_session_store, { key: 'example_session_token', domain: :all, tld_length: 4, serializer: :hybrid, redis: { host: "....", key_prefix: "...", expire_after: 7.day, }}

相關原始碼: action_dispatch/middleware/cookies.rb

在這裡的 tld_length就是看你 domain 的 tld 想設定到哪就寫多少

以 kerkerj.staging.example.com為例,想要 example.com就是 2,想要 kerkerj.staging.example.com就是 4

而在 Rails App 裡,在 config.action_dispatch.tld_length(或 ActionDispatch::Http::URL.tld_length) 設定的 tld_length

在 rails api document的 #domain有用法

原始碼則解釋得更清楚 actionpack/lib/action_dispatch/http/url.rb

> ActionDispatch::Http::URL.extract_domain("kerkerj.staging.example.com", 1)=> "example.com"> ActionDispatch::Http::URL.extract_domain("kerkerj.staging.example.com", 2)=> "staging.example.com"> ActionDispatch::Http::URL.extract_domain("kerkerj.staging.example.com", 3)=> "kerkerj.staging.example.com"> ActionDispatch::Http::URL.extract_domain("example.com", 1)=> "example.com"> ActionDispatch::Http::URL.extract_domain("example.com", 3)=> "example.com"

tld_length在兩邊的實作與意義上不同,需要注意。

Back to posts

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台