You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby on Rails中访问localStorage与Cookies并获取特定项?

在Ruby on Rails中访问浏览器localStorage和Cookies的方法

首先得明确核心区别:localStorage是浏览器端专属存储,Rails后端无法直接读取;而Cookies前后端都能操作,但逻辑和方式完全不同。下面分场景说明:

一、处理localStorage

localStorage完全运行在用户浏览器环境里,Rails的Ruby服务器代码根本触不到它。你之前用localStorage.setItem/getItem没得到正确输出,大概率是试图在Rails的Ruby代码块(比如ERB模板的<% %>里)调用这些方法——这是典型的环境混淆错误,Ruby代码在服务器执行,localStorage只存在于用户浏览器中。

正确流程是:前端用JS读取localStorage,再把数据传给Rails后端。

1. 前端读取并发送localStorage数据

// 从localStorage获取目标项
const targetItem = localStorage.getItem('your_key_name');

// 通过AJAX把数据发给Rails后端(必须带上CSRF Token)
fetch('/your_controller/action', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
  },
  body: JSON.stringify({ item: targetItem })
});

2. Rails后端接收数据

在对应控制器里获取前端传来的参数:

class YourController < ApplicationController
  def your_action
    received_item = params[:item]
    # 这里写业务逻辑,比如存库、返回响应等
    render json: { status: 'success', data: received_item }
  end
end

二、处理Cookies

Cookies分两类:HttpOnly Cookie(默认配置,只有后端能访问,适合存敏感信息如登录令牌)和非HttpOnly Cookie(前后端都能访问)。

1. 前端访问Cookies

用document.cookie操作,但需要自己解析格式:

// 封装获取特定Cookie的函数
function getCookie(cookieName) {
  const cookieStr = `; ${document.cookie}`;
  const cookieParts = cookieStr.split(`; ${cookieName}=`);
  if (cookieParts.length === 2) return cookieParts.pop().split(';').shift();
}

// 获取名为'user_theme'的Cookie
const userTheme = getCookie('user_theme');

2. Rails后端访问Cookies

直接用Rails内置的cookies对象即可:

# 获取特定Cookie
user_token = cookies[:user_token]

# 设置HttpOnly Cookie(前端无法访问,安全)
cookies[:user_token] = {
  value: 'your_token_value',
  expires: 7.days.from_now,
  secure: Rails.env.production?, # 生产环境强制HTTPS
  httponly: true # 默认就是true,可省略
}

# 设置允许前端访问的Cookie(非HttpOnly)
cookies[:user_theme] = {
  value: 'dark',
  expires: 1.week.from_now,
  httponly: false
}

内容的提问来源于stack exchange,提问作者tej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:27