首页 新闻 会员 周边 捐助

cookie无效

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-28 09:45

如下的验证码生成与校验,部分用户反映无论如何都是验证码失效,但是部分用户正常

生成验证码时的代码

HttpCookie hc = context.Response.Cookies[cookieName];

if ( hc== null)       hc=new HttpCookie(cookieName);

hc.Value = outCodeToCookie;

hc.Expires = DateTime.Now.AddMilliseconds(1*60 * 1000); context.Response.AppendCookie(hc);

image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

context.Response.ClearContent();

context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

 context.Response.ContentType = "image/Jpeg";             context.Response.BinaryWrite(ms.GetBuffer());            

context.Response.Flush();

 校验的时候

HttpCookie cookie = HttpContext.Current.Request.Cookies[CookieName];
            if (cookie != null && !string.IsNullOrEmpty(cookie.Value))
            {
                if (输入正确)
                {
                   返回正确
                }
                else
                {返回错误}
                
            }
            return 验证码超时;

王者永乐的主页 王者永乐 | 初学一级 | 园豆:29
提问于:2013-08-22 16:44
< >
分享
最佳答案
0

去看看客户端的时间正确呗,比如客户端的时间小与(或者说早于)当前时间,你这边是服务器设置expire时间,客户永远cookie过期。

收获园豆:5
小AI | 菜鸟二级 |园豆:354 | 2013-08-22 20:23

晕,按照客户机时间?那客户机如果设定时间很小,那岂不是永不失效.这个时间难道还要保存在服务端?

王者永乐 | 园豆:29 (初学一级) | 2013-08-23 10:47

@王者永乐: 

你仔细想想这个原理就明白了。

这个问题我遇到过。

貌似有园友也遇到过:http://www.cnblogs.com/greystar/archive/2008/07/18/2235350.html

我当时的做法是cookie的时间从客户端作为基准。

小AI | 园豆:354 (菜鸟二级) | 2013-08-23 17:18
其他回答(1)
0

试试将

context.Response.AppendCookie(hc);

改为

context.Response.SetCookie(hc);
收获园豆:5
dudu | 园豆:29789 (高人七级) | 2013-08-22 18:46
context.Response.AppendCookie(hc);

这有什么问题?

支持(0) 反对(0) 小AI | 园豆:354 (菜鸟二级) | 2013-08-22 20:23
支持(0) 反对(0) dudu | 园豆:29789 (高人七级) | 2013-08-22 21:46

@dudu: 改为setcookie有同样的问题

支持(0) 反对(0) 王者永乐 | 园豆:29 (初学一级) | 2013-08-23 11:45

@王者永乐: 我们在开发中用的是FormsAuthenticationTicket,没遇到这个问题

支持(0) 反对(0) dudu | 园豆:29789 (高人七级) | 2013-08-23 12:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册