主题:[原创]两组代码的比较,请大虾指点!!!
Cometrue
[专家分:10] 发布于 2007-09-04 23:39:00
有一个正确,一个不正确,请帮忙改正不正确的代码,谢谢!!!
(一)
int counter;
HttpCookie newcookie;
newcookie = Request.Cookies["visitInfo"];
if (newcookie == null)
{
counter = 1;
}
else
{
counter = Convert.ToInt32(Request.Cookies["visitInfo"]["times"]);
}
Response.Cookies["visitInfo"]["times"] = Convert.ToString(counter+1);
Response.Cookies["visitInfo"]["lasttime"] = DateTime.Now.ToString();
Response.Cookies["visitInfo"].Expires = System.DateTime.Now.AddMonths(1);
Response.Write("你是第" + counter + "次访问本网站" + "<br>");
Response.Write("上次访问本站的时间是在:" + Request.Cookies["VisitInfo"]["lasttime"] + "<br>");
(二)
int counter;
HttpCookie objCookie;
objCookie = Request.Cookies["VisitInfo"];
if (objCookie == null)
counter = 1;
else
{
counter = Convert.ToInt32(Request.Cookies["VisitInfo"]["times"]);
}
Response.Cookies["VisitInfo"]["times"] = Convert.ToString(counter + 1);
Response.Cookies["VisitInfo"]["lasttime"] = Convert.ToString(System.DateTime.Now);
Response.Cookies["VisitInfo"].Expires = System.DateTime.Now.AddMonths(10);
Response.Write("你是第" + counter + "次访问本网站" + "<br>");
Response.Write("上次访问本站的时间是在:" + Request.Cookies["VisitInfo"]["lasttime"] + "<br>");
回复列表 (共4个回复)
沙发
linxuanxu [专家分:9360] 发布于 2007-09-05 09:25:00
你的两段代码都是正确的.
关键是你没有有注意Cookies在URL上是区分大小写的.所以造成Cookies值无法写回.你要注意如果Cookies名称相同的化.我们一般要保证Cookies大小写的一致.一般全采用小写.
Response.Cookies["VisitInfo"]["times"] = Convert.ToString(counter + 1);
Response.Cookies["VisitInfo"]["lasttime"] = Convert.ToString(System.DateTime.Now);
Response.Cookies["VisitInfo"].Expires = System.DateTime.Now.AddMonths(10);
如果你先运行(一)代码
把(二)大V改成小v .
如果你先运行(二)代码
把(一)小v改为大V
板凳
Cometrue [专家分:10] 发布于 2007-09-07 12:08:00
我说的错误是指:不是我间隔着用两组代码而得不到本想的效果!就是独立用第一组代码也得不到想要的结果,而独立用第二组却可以!我也觉得第一组代码没错,可就是不能得到正确的结果!
还请大虾们继续指点;
谢谢!!
3 楼
linxuanxu [专家分:9360] 发布于 2007-09-07 13:53:00
我刚才说了.你的两组代码全都是正确的.两个都没有错误.
你用第一组代码出错的原因是.你在运行第一组代码之前用过第2组代码.Cookies严格上来说在URL上区分大小写.
比如拷贝你的的一组代码:
int counter;
HttpCookie newcookie;
newcookie = Request.Cookies["visitInfo"];
if (newcookie == null)
{
counter = 1;
}
else
{
counter = Convert.ToInt32(Request.Cookies["visitInfo"]["times"]);
}
Response.Cookies["visitInfo"]["times"] = Convert.ToString(counter+1);
Response.Cookies["visitInfo"]["lasttime"] = DateTime.Now.ToString();
Response.Cookies["visitInfo"].Expires = System.DateTime.Now.AddMonths(1);
Response.Write("你是第" + counter + "次访问本网站" + "<br>");
Response.Write("上次访问本站的时间是在:" + Request.Cookies["VisitInfo"]["lasttime"] + "<br>");
将:"visitInfo" 换成 "xisitInfo" 然后运行.应该是正常的,可以累加计数器的值的.
其实你只要遵循今后Cookies名称全为小写值就不会有这种摸不着头脑的错误了.
就好比运算的优先级一样.用括号区分优先级是最好的.让系统帮你区分.报出的错误有时你都蒙了.道理是一样的.你两个都是对的让大家找错怎么可能找的到 ? 呵呵
4 楼
Cometrue [专家分:10] 发布于 2007-09-09 00:22:00
哦,知道了,谢谢哈,非常感谢!!!
我来回复