• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    

最近在做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()重载自己就够了,这个我没有实验。

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Asp.Net Core 2.0 之旅---在Ubuntu上部署WEB应用程序发布时间:2022-07-10
下一篇:
asp.net页面编码问题发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap