[問題] 如何控制cookie的值

作者: davidwu0123 (華而綺麗)   2013-11-02 13:10:09
不好意思再度請教各位,這次不是語法錯誤的問題
我在做猜拳遊戲的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用的那三項數值又被重置..
請求前輩解惑一下,感激不盡。
作者: davidwu0123 (華而綺麗)   2012-01-02 15:47:00
結果是從CGI::cookie.new 到print cgi那六行要再寫一次才有辦法 總覺得這個寫法好冗長 也不是很懂原因

Links booklink

Contact Us: admin [ a t ] ucptt.com