前些时候做网站的时候需要一个注册界面,用到了图片验证码。为了省点事,直接调用了现成的webservice(呵呵,这里跟大家分享下这个提供服务的网站,http://www.webxml.com.cn/WebServices/ValidateCodeWebService.asmx)。
从网上看的资料,建立一个ValidatePic.aspx的页,专门用来输出图片,页面的后台代码如下: protected void Page_Load(object sender, EventArgs e)
{
MyRandom mr = new MyRandom();
string valStr = mr.RandNum(4);
Session["validateSn"] = valStr;//这里有问题??!!
cn.com.webxml.www.ValidateCodeWebService wr = new cn.com.webxml.www.ValidateCodeWebService();
byte[] bytesBmp = wr.enValidateByte(valStr);
Response.BinaryWrite(bytesBmp);
Response.End();
}然后,在注册界面上的一个img中引用这个图片,即: <img id="img1" runat="server" src="~/ValidatePic.aspx" class="ValPicStyle" alt="验证图片"/>验证时,if (validateStr == Session["validateSn"].ToString())
现在,问题是:当我第一次打开vs2008时,运行这个程序,会出现“未将对象设置引用的问题”。以后就OK了。查了些资料,貌似刚开始Session["validateSn"]没有实例化。可是明明我在Page_Load中写了Session["validateSn"] = valStr;这不是实例化吗?再说,只有第一次不可以,图形验证码也已经出现了。
从网上看的资料,建立一个ValidatePic.aspx的页,专门用来输出图片,页面的后台代码如下: protected void Page_Load(object sender, EventArgs e)
{
MyRandom mr = new MyRandom();
string valStr = mr.RandNum(4);
Session["validateSn"] = valStr;//这里有问题??!!
cn.com.webxml.www.ValidateCodeWebService wr = new cn.com.webxml.www.ValidateCodeWebService();
byte[] bytesBmp = wr.enValidateByte(valStr);
Response.BinaryWrite(bytesBmp);
Response.End();
}然后,在注册界面上的一个img中引用这个图片,即: <img id="img1" runat="server" src="~/ValidatePic.aspx" class="ValPicStyle" alt="验证图片"/>验证时,if (validateStr == Session["validateSn"].ToString())
现在,问题是:当我第一次打开vs2008时,运行这个程序,会出现“未将对象设置引用的问题”。以后就OK了。查了些资料,貌似刚开始Session["validateSn"]没有实例化。可是明明我在Page_Load中写了Session["validateSn"] = valStr;这不是实例化吗?再说,只有第一次不可以,图形验证码也已经出现了。
{if (validateStr == Session["validateSn"].ToString())} 试试
if (validateStr == Session["validateSn"].ToString())这个先执行
,然后再去访问的~/ValidatePic.aspx
所以就没有实例化咯
怪我没有说清楚。此验证是在一个Button1_Click中执行的。应该是先访问~/ValidatePic.aspx,再执行验证的。