关于Session 验证码的问题

Totem_Guo 2011-10-14 03:17:27
前些时候做网站的时候需要一个注册界面,用到了图片验证码。为了省点事,直接调用了现成的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;这不是实例化吗?再说,只有第一次不可以,图形验证码也已经出现了。
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Totem_Guo 2011-10-15
  • 打赏
  • 举报
回复
额,不知道怎么搞的,这个问题不再出现了。
  • 打赏
  • 举报
回复
if(validateStr == Session["validateSn"])
地菜 2011-10-14
  • 打赏
  • 举报
回复
我建议你安装到iis 上再试试
wuzhanghui1988 2011-10-14
  • 打赏
  • 举报
回复
看是不是网站配置filter,配置权限过滤器或者别的过滤器,在访问该验证码时,跳过权限过滤的验证。
  • 打赏
  • 举报
回复
学习,呵呵,学习中
Totem_Guo 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 paulyjin 的回复:]

if (!string.IsNullOrEmpty(Session["validateSn"]"].ToString()))
{if (validateStr == Session["validateSn"].ToString())} 试试
[/Quote]
如果这样,第一次值为null的时候,第一次的验证就不会执行。也就是用户至少要输入两次验证码。
Totem_Guo 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 csy19871106 的回复:]

你第一次是先访问的
if (validateStr == Session["validateSn"].ToString())这个先执行
,然后再去访问的~/ValidatePic.aspx
所以就没有实例化咯
[/Quote]

怪我没有说清楚。此验证是在一个Button1_Click中执行的。应该是先访问~/ValidatePic.aspx,再执行验证的。
zhouzhenhuaqaz 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 csy19871106 的回复:]
你第一次是先访问的
if (validateStr == Session["validateSn"].ToString())这个先执行
,然后再去访问的~/ValidatePic.aspx
所以就没有实例化咯
[/Quote] 正解
橙宝宝 2011-10-14
  • 打赏
  • 举报
回复
你确定第一次加载页面Session["validateSn"]传值成功了吗?你调试一下看看,如果没有你可以尝试给她赋个初始值看看
acol 2011-10-14
  • 打赏
  • 举报
回复
你第一次是先访问的
if (validateStr == Session["validateSn"].ToString())这个先执行
,然后再去访问的~/ValidatePic.aspx
所以就没有实例化咯
paulyjin 2011-10-14
  • 打赏
  • 举报
回复
if (!string.IsNullOrEmpty(Session["validateSn"]"].ToString()))
{if (validateStr == Session["validateSn"].ToString())} 试试



62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧