gpt4 book ai didi

ruby-on-rails - 如何保护我的网站免受多个帖子请求的影响?

转载 作者:数据小太阳 更新时间:2023-10-29 08:45:18 25 4
gpt4 key购买 nike

任何用户都可以“喜欢”我网站上的照片。但是如果他多次按下按钮(比如10次),那么这10个post请求就会被发送到服务器。我试图在 session 的帮助下解决。我认为这段代码每 5 秒就会被点赞一次。但事实并非如此!有我的 action 和 before_filter:

def like
photo.create_like if session[:voted].nil?
session[:voted] = Time.now.to_a.first(3).reverse.join
redirect_to root_path
end


def check_session
a = Time.now.to_a.first(3).reverse.join
b = a.to_i - session[:voted].to_i
session[:voted] = nil if b >= 5

end

最佳答案

您不能对 session 执行此操作(至少不能使用默认 session 存储):默认情况下,rails 将 session 存储在 cookie 中。

Cookie 由浏览器作为请求的一部分发送,您服务器的响应可以选择更新它们。如果您快速连续多次单击喜欢按钮,那么您将触发多个请求,每个请求都包含表示 session 当前状态的 cookie 数据。您的响应更新了 session ,但是对于已经发送的请求来说为时已晚 - 它们的 session 数据已经发送到服务器并且不会包含响应所做的任何更改。

正如其他人所说,创可贴是使用 Javascript 来限制多次提交,但处理此问题的唯一可靠方法是在数据库级别(在 likes 表上使用唯一索引)。

关于ruby-on-rails - 如何保护我的网站免受多个帖子请求的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com