Rails 5.0.3跨路径Cookie问题:JS设置后控制器无法读取
你猜的完全对!Cookie路径不匹配就是这个问题的核心原因。
问题根源
当你用原生JavaScript设置document.cookie时,如果没有显式指定path参数,浏览器会默认把Cookie的路径设为当前页面的路径(比如你在/products/456页面设置的,路径就是/products)。而Rails的cookies方法默认只会读取**路径为/**的Cookie,这就导致控制器里拿不到你设置的clicked_item_id。
快速解决方案
修改你的JS代码,在设置Cookie时明确加上path=/参数,让Cookie在整个域名下生效:
var itemId = $(e.currentTarget).data('item-id'); document.cookie = 'clicked_item_id=' + itemId.toString() + '; path=/';
额外注意事项
- 如果你的应用部署在子域名环境下(比如
app.yourdomain.com),可能还需要加上domain参数,比如:
不过本地document.cookie = 'clicked_item_id=' + itemId.toString() + '; path=/; domain=.yourdomain.com';localhost开发时不需要这一步。 - 验证方法:设置完Cookie后,打开Chrome开发者工具的「Application」标签,找到「Cookies」下的
localhost,检查clicked_item_id的Path是否为/。确认后刷新页面,控制器里用cookies[:clicked_item_id]就能正常读取了。
内容的提问来源于stack exchange,提问作者Taichi
相关产品推荐
相关产品推荐

