• asp.net 验证码session为null的解决方案


        

    最近在做Y集团的订单系统时,登陆页面在测试时发现一个以前没有注意到的问题,登陆页面需要使用验证码,引用了一个生成验证码的aspx页面,在aspx页面中生成session和验证码图片,在登陆页面的后台处理中使用这个session来判断验证码的正确与否。奇怪的是第一次登陆是没有问题的,可当登陆成功后,在session的有效期间内关闭浏览器,然后重启浏览器进入登陆页面重新登陆,登陆页面的后台却获取不到session了,刷新验证码的页面也不能使得session被登陆页面获取,后来我尝试把浏览器的cookie删除后再是,结果可以登陆了。这样原因就找到了,cookie。突然想到session的工作机制,在生成session的时候会向浏览器客户端发送一个会话id,作为cookie保存在浏览器,这样回传是服务器可以判断与哪一个用户会话相对应,突然关闭浏览器再重新打开,会话id并没有发生改变,通过测试发现管理浏览器重新打开服务端session会丢失,那么验证码页面重新生成session后却无法重新获取的原因可能是,新的session实例的会话id并没有更新回客户端,客户端返回的仍然是之前的会话id(在有效期内),这样服务器端在对应的时候找不到之前的服务器session会话了,虽然有一份新的服务端session,但是与这个已经对应不上了,这样就产生了第二次怎么样也登陆不上去的问题,解决的方法就是在登陆页面,登陆事件里做如下操作

     if (Session["ValidCode"] == null)

            {

                Response.Redirect("Account/logoff.aspx");           

                return;

            }

    logoff.aspx页面是一个注销页面,最后悔跳转回登陆页面,

    他的load事件代码如下

       HttpCookie aCookie;

            string cookieName;

            int limit = Request.Cookies.Count;

            for (int i = 0; i < limit; i++)

            {

                cookieName = Request.Cookies[i].Name;

                aCookie = new HttpCookie(cookieName);

                aCookie.Expires = DateTime.Now.AddDays(-1);

                Response.Cookies.Add(aCookie);

            }

            Response.BufferOutput = true;

            Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));

            Response.Cache.SetCacheability(HttpCacheability.NoCache);

            Response.AppendHeader("Pragma", "No-Cache");

            Response.Buffer = true;

            Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);

            Response.Cache.SetExpires(DateTime.Now.AddDays(-1));

            Response.Expires = 0;

            Response.CacheControl = "no-cache";

            Response.Cache.SetNoStore(); 

            FormsAuthentication.SignOut();

            Response.Redirect("../default.aspx");

    据msdn文档的意思说,Response.Redirect()在这里的作用很重要,可以重新建立起会话;可能没必要这么麻烦,可能只需一次Response.Redirect()重载自己就够了,这个我没有实验。

    实测有效。记录一下以备后查。

  • 相关阅读:
    震撼!一组你从未见过的惊艳照片(45图)
    看明白了这个故事不精神分裂算你厉害
    关于无法把程序(Adobe Fireworks CS5)添加到打开方式的解决办法
    打伞
    引用视频全屏播放代码
    居家生活实用生活小窍门集锦
    《西游记第一百零一回》第一百零一回观(转)
    保鲜膜的28种妙用!
    20155324 《信息安全系统设计基础》课程总结
    2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/srszzw/p/3396259.html
Copyright © 2020-2023  润新知