日期:2014-05-19  浏览次数:20433 次

下了很大决心才提出来的问题!
各位大哥,我在做论坛时遇到一个问题,好久都没有解决,想来论子里问问的,可是又知道该怎么描述,今天火了,下决心要把这个总是搞定!希望各位一定帮帮我啊!我尽量把问题描述得清楚一点!
在用户登陆的时候除了要输入用户名密码和验证码,我的验证码是一张图片,图片的地址是一个.aspx的页面,我在这个页面里面用代码实现了或得一个随机数,并把随机数变成图片,并且在获得随机数的时候将这个随机数写入Session   用户登陆的时候把用户输入的验证码和这个Session里的值比较,如果相同就做登陆要做的其它操作,如果不同,就弹出一个窗口,提示验证码错误!下面贴上一部份代码

button_login()//登陆按纽的事件
{
        if(tb_validate.text!=Session[ "validate "].Tostring())//判断用户输入内   容是否正确
          {
                Response.Write( " <script>   alert( '验证码错误 ') <script> ");
                return;
          }
          else
          {
                做用户信息的验证操作   等等…………//
          }  

       
}


以上是我的一部份代码,但是我用这段代码的时候发现了一个问题,当我把所以信息都正确输入后,并成功登陆,我点了一下浏览器的后退按纽,问题发生了,那个警告窗口就弹了出来。真的想不通是什么原因,我设了断点调试,当点了后退按纽什么语句都没做,就直接弹出了那个验证码错误的警告窗口,我试了把那个return语句改为Response.redirect(index.aspx);这样的话不会出现刚才的问题,但是当输入错误的验证码时什么警告都没有就转到首页去了,这样用户可能都不知道为什么没有登陆成功,所以也是不好的!上面那个错误是我调试时发现的,也许在现实使用中没有人刚登陆成功就去后退,可是我就是不爽!有一个问题没解决我都会觉得不完美!请求高手帮我看看到底为什么会出现这样的问题,怎么样解决比较好!这里先谢了,能把我这么长的问题看完也很感激了!

------解决方案--------------------
!IsPostBack
------解决方案--------------------
后退的时候获取验证码的页面刷新,此时Session[ "validate "]已非登陆时的值tb_validate.text!=Session[ "validate "].Tostring() 为false
所以弹出对话框
------解决方案--------------------
Page_Load中....
{
if(IsPostBack)
return;
}

------解决方案--------------------
if(!IsPostBack)
------解决方案--------------------
这个问题我遇到过知道是什么原因!

主要是这句在搞鬼Response.Write( " <script> alert( '验证码错误 ') <script> ");

如果失败它会把这个脚本插到生成的HTML网页,再次正确登陆后跳到另一个网页时,再返回

就会跳出 '验证码错误 '这一句。

建议错误时跳到一个专门报错的网页好一点.



------解决方案--------------------

if(Session[ "Login "] ==null){
if(tb_validate.text!=Session[ "validate "].Tostring())//判断用户输入内 容是否正确
{
Response.Write( " <script> alert( '验证码错误 ') <script> ");
return;
}
else
{
做用户信息的验证操作 等等…………//
Session[ "Login "] = "Yes ";
}
}
------解决方案--------------------
Response.Write( " <script> alert( '验证码错误 ') <script> ");

1 楼主能否不用弹出警告这种方式呢,直接的Lable提示就行了。警告窗也不友好
2 这个页面可以在页面加载的时候检查一下是否用户登录的session。如果已登录,则不需要显示用户名、密码框、认证码之类的东西,以另外的一段提示的文字或者什么的显示