【问题标题】:Getting Cookie Overflow in rails application(REDMINE)在 Rails 应用程序中获取 Cookie 溢出(REDMINE)
【发布时间】:2020-04-24 10:08:25
【问题描述】:
ActionDispatch::Cookies::CookieOverflow (ActionDispatch::Cookies::CookieOverflow):
actionpack (4.2.8) lib/action_dispatch/middleware/cookies.rb:529:in `[]='

点击 redmine rest api 时出现此错误。像 url1 这样的简单 get api 可以正常工作,但是当涉及像 url2 这样的复杂 url 时,应用程序会引发 cookie 溢出。

url1: localhost:3000/issues.json?page=1&limit=100
url2: http://localhost:3000/issues.json?key=292fe116d13d5f5db8a0e3f2b031f1e57ad1c882&f[]=project_id&op[project_id]=!&v[project_id][]=505&f[]=project_id&op[project_id]=!&v[project_id][]=478&f[]=project_id&op[project_id]=!&v[project_id][]=366&f[]=project_id&op[project_id]=!&v[project_id][]=419&f[]=project_id&op[project_id]=!&v[project_id][]=343&f[]=project_id&op[project_id]=!&v[project_id][]=345&f[]=project_id&op[project_id]=!&v[project_id][]=512&f[]=project_id&op[project_id]=!&v[project_id][]=487&f[]=project_id&op[project_id]=!&v[project_id][]=473&f[]=project_id&op[project_id]=!&v[project_id][]=509&f[]=project_id&op[project_id]=!&v[project_id][]=520&f[]=project_id&op[project_id]=!&v[project_id][]=404&f[]=project_id&op[project_id]=!&v[project_id][]=440&f[]=project_id&op[project_id]=!&v[project_id][]=389&f[]=project_id&op[project_id]=!&v[project_id][]=467&f[]=project_id&op[project_id]=!&v[project_id][]=501&f[]=project_id&op[project_id]=!&v[project_id][]=474&f[]=project_id&op[project_id]=!&v[project_id][]=471&f[]=project_id&op[project_id]=!&v[project_id][]=480&f[]=project_id&op[project_id]=!&v[project_id][]=507&f[]=project_id&op[project_id]=!&v[project_id][]=383&f[]=project_id&page=1&limit=100

除了用户名和会话中的 CAS 票之外,我没有存储任何内容:

 request.session['cas'] = { 'user' => user, 'ticket' => ticket, 'extra_attributes' => [] }

我已经在很多论坛中搜索过解决方案。所有人都说不要保存不必要的数据,但我只保存用户名和 CAS 票。当我打印会话时,结果如下:

puts(session.to_hash)

{"session_id"=>"fbe61cf9fd1c2ef0111d5d84a1a374c2", "cas"=>{"user"=>"user@gmail.com", "ticket"=>"ST-27189-R20MW7GBWaLWNJvl1aMi-localhost", "extra_attributes"=>[]}}

但是当像下面这样检查会话时,我得到了大量的乱码数据,如下所示。我看到来自 GET 的 ActiveRecord 内容和查询参数确实是会话的一部分。

puts(session.inspect)

[result]: https://textsaver.flap.tv/lists/3caw "Click here for session.inspect output"

由于我是新手并且刚刚开始在 Rails 上使用 ruby​​,任何建议都将受到高度赞赏。 谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 session redmine


    【解决方案1】:

    带有许多参数的第二个 url 很长并且它使会话膨胀,因为它存在于original_fullpathquery_string 和会话中的其他变量中。并且 cookie 存储有限制 - 只有 4kb。

    我建议将会话存储从 cookie 更改为 databasememcache,如链接答案中所述。

    编辑: 最新信息可以在docs找到。

    【讨论】:

    • 那些链接是 5 -8 年前的,它们还有用吗?
    • @MayraNavarro 最初的问题是关于 ruby​​-on-rails-3,所以我认为可以提供与那个时间相关的信息。现在有一些区别:memcache 有点被弃用(使用 CacheStore 代替)并且在数据库中存储会话需要 gem。我添加了答案的新链接,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2014-06-21
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多