简介
我正在开发一个带有Rails 4的应用程序,它作为一个简单的仪表板,它遍历几个div容器,在主页上的象限中划分出来,显示各种图形/表格等。我正在使用cookie来记住哪个索引当前显示的容器处于这样的状态,当网站重新加载时,它会显示正在显示的容器,而不会返回到第一个容器。
问题
在我开始注意到cookie开始自行更改并且我不知道如何改变之前,一切似乎都正常工作。我得出了这个结论,因为我使用一个函数设置并获取cookie,无论何时调用它都会打印到控制台。当这些“流氓”变化发生时,没有任何东西被记录到控制台。
这是它如何运作的要点。更新函数使用辅助函数来获取cookie,根据当前索引计算下一个索引,然后调用另一个辅助函数来存储cookie。只有这两个功能才能获取和设置cookie。
var update_quadrant = function(id) =
$.when(get_cookie(current_feed)).done(function(response) {
var current_index = parseInt(response);
var next_index = //depends on current_index
$.when(store_cookie(current_feed, next_index, "from update")).done(function(response){
//code that updates quadrant
setTimeout(function() { update_quadrant(id);}, 30000);
});
这是一些典型的cookie的样子。
{"circleci" => "0", "newrelic" => "1", "googleanalytics" => "0"}
的Javascript
存储Cookie值
var store_cookie = function(feed, value, other) {
return $.ajax({
url: 'home/cookie_store',
type: 'POST',
data: {
feed: feed,
value: value,
other: other || ""
}
}).done(function(response) {
console.log(response);
});
};
获取cookie
var get_cookie = function(feed) {
return $.ajax({
url: 'home/cookie_get',
data: {
feed: feed
}
}).done(function(response) {
console.log("Got cookie value: ", parseInt(response), "for ", feed);
});
};
控制器
响应ajax调用存储cookie值
#home controller
def store_cookie
feed = params[:feed]
value = params[:value]
other = params[:other]
cookies[feed] = value.to_s
render text: "stored #{value} for #{feed}, other: #{other}"
end
响应ajax调用cookie值。
#home controller
def give_cookie
feed = params[:feed]
cookies[feed] = "0" if cookies[feed].blank?
render text: cookies[feed.to_s]
end
我试图测试的内容
我认为也许某种程度上setTimeout函数是持久的,并且正在执行多个setTimeout计时器,但这并没有改变值发生变化而没有从store_cookie函数记录到控制台的事实。
例如,我设置setInterval
每秒将document.cookie
记录到控制台。这是将要显示的内容。
"Stored 0 for circleci, other: from update quadrant"
//correctly changed with store_cookie function as it logs the response from the controller
{"circleci" => "0", "newrelic" => "1", "googleanalytics" => "0"}
...//no change
...//no change
...//no change
{"circleci" => "1", "newrelic" => "1", "googleanalytics" => "0"}
//but nothing printed to console from store_cookie function
//quadrant eventually goes to update after 30 seconds, and gets wrong cookie value
"Got cookie value: 1 for circleci" //should be 0 not 1
更令人费解的是,当我点击使用不包含任何javascript源文件的布局的链接时,cookie值仍然被更改。
我一直在努力想知道从哪里开始调试这个,因为我进行了双重和三重检查,以确保代码端的所有cookie更改都通过我的store_cookie函数更改,并且我看到这些cookie值正在更改没有任何记录到控制台,也没有调用store_cookie函数。
有没有人知道什么导致我的cookie值似乎自己发生变化?