Session的使用过程中应注意的一个小问题

时间:2022-03-10 15:47:14

在学习AllEmpty大神的从零开始编写自己的C#框架系列文章中,发现的问题:在验证码的缓存Session["vcode"]的赋值时,发现Session["vcode"]的值一直为null。

发现原来是在调用验证码生成类给Session["vcode"]赋值时,这个Session["vcode"]还没有创建,所以无法赋值。

  //生成验证码
imgCaptcha.ImageUrl = "Application/Vcode.ashx?t=" + DateTime.Now.Ticks;

Vcode.ashx中,验证码生成并向Session["vcode"]赋值:

 VerificationCode vcode = new VerificationCode
{
CountCode = ,
ImageHeight = ,
ImageWidth = ,
NoiseLine = ,
NoisePoint = ,
FontSize =
};
//生成验证码
vcode.GetCaptcha();
//向Session["vcode"]中赋值
HttpContext.Current.Session["vcode"] = vcode.Code;
string code = HttpContext.Current.Session["vcode"].ToString();//调试用,会报【未将对象引用设置到对象的实例】错误

解决办法是在调用Vcode.ashx之前,声明Session["vcode"]

                 //声明Session["vcode"],并赋空值
Session["vcode"] = string.Empty;
//生成验证码
imgCaptcha.ImageUrl = "Application/Vcode.ashx?t=" + DateTime.Now.Ticks;