[問題] 如何控制cookie的值
不好意思再度請教各位,這次不是語法錯誤的問題
我在做猜拳遊戲的cgi,用cookie紀錄勝敗的次數
設定如下:
require 'cgi'
cgi = CGI.new
cookies = cgi.cookies
//將cookie的value轉成int
win = (cookies["p_win"][0]||0).to_i
even = (cookies["p_even"][0]||0).to_i
lose = (cookies["p_lose"][0]||0).to_i
new_cookie=CGI::Cookie.new("name"=>"p_win","value"=>win.to_s) #勝
new_cookie2=CGI::Cookie.new("name"=>"p_even","value"=>even.to_s) #平手
new_cookie3=CGI::Cookie.new("name"=>"p_lose","value"=>lose.to_s) #敗
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie2])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie3])
現在碰的問題是,
我已經寫好了判定勝負的機制,
但我就是無法成功將新的值記錄到cookie裡面。
但用重新整理網頁會自動累加數值的方法測試,
確定以上三項的cookie是會被記錄的..
以下是我測試的幾種寫法,都沒有成功,我搞不太懂原因出在哪:
(1)
if 平手
even += 1
new_cookie2 =CGI::Cookie#value=(even.to_s)
想說用even的新值套入new_cookie2,但失敗
(2)
if 平手
new_cookie2.value[0] = (new_cookie2.value[0].to_i+1).to_s
因為value只收string,
所以想說轉成int再加1再轉回string應該可以,結果也不行
想請問一下是這些方法有誤,還是我忽略了什麼才會讓cookie的值無法被更新?
前面前置的程式碼是我照範例去改的。
範例的程式原本是用來記錄拜訪次數,像是這樣:
visit = (cookies["visit"][0]||0).to_i+1
一開始就寫了這一行,然後才用CGI::Cookie.new去讀visit的值,
所以可以成功累加,
但如果把這行原封不動搬到勝負判定的那邊,
再重新整理的時候又會跳到程式最前面那幾行,
導致cookie跟讀取cookie用的那三項數值又被重置..
請求前輩解惑一下,感激不盡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 133.51.83.22
→
11/02 15:47, , 1F
11/02 15:47, 1F
→
11/02 15:47, , 2F
11/02 15:47, 2F
目前寫法如下,要的結果是弄出來了,但原理也沒完全弄懂。
初始化的階段:
require 'cgi'
cgi = CGI.new
cookies = cgi.cookies
#讀取cookie中勝、敗、平手次數,若讀取不到則為0
win = (cookies["p_win"][0]||0).to_i
even = (cookies["p_even"][0]||0).to_i
lose = (cookies["p_lose"][0]||0).to_i
#用來儲存勝、敗、平手次數的cookie
new_cookie=CGI::Cookie.new("name"=>"p_win","value"=>win.to_s)
new_cookie2=CGI::Cookie.new("name"=>"p_even","value"=>even.to_s)
new_cookie3=CGI::Cookie.new("name"=>"p_lose","value"=>lose.to_s)
#原因不明,不寫出以下三行就無法真正紀錄住cookie
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie2])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie3])
然後是勝負判定及之後的處理:
case judge
when 'win' #刷新勝利次數的值,以下類推
win+=1
when 'lose'
lose+=1
when 'even'
even+=1
end
#將新的勝、敗、平手次數
new_cookie=CGI::Cookie.new("name"=>"p_win","value"=>win.to_s)
new_cookie2=CGI::Cookie.new("name"=>"p_even","value"=>even.to_s)
new_cookie3=CGI::Cookie.new("name"=>"p_lose","value"=>lose.to_s)
#同樣不寫這三行就無法成功
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie2])
print cgi.header("charset"=>"utf-8","cookie"=>[new_cookie3])
※ 編輯: davidwu0123 來自: 133.51.83.22 (11/02 15:56)
※ 編輯: davidwu0123 來自: 133.51.83.22 (11/02 15:56)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12