[问题] 如何控制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