img标签的src=""会引起的Page_Load多次执行

今天看见园子里有人因img的src为空导致session丢失,详情见http://www.cnblogs.com/kyneblog/archive/2009/06/11/1500999.html

以前一直没注意这个,所以晚上特地写了一段代码验证:

Default.aspx后台代码:

using  System;
using  System.Web;
using  System.IO;

namespace  src
{
    
public   partial   class  _Default : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            WriteLog();
        }


        
public   static   void  WriteLog()
        {
            
string  _logFile  =  HttpContext.Current.Server.MapPath( " log/log.txt " );

            
using  (StreamWriter sw  =   new  StreamWriter(_logFile,  true ))
            {
                
string  s  =   string .Format( " {0} {1} " , HttpContext.Current.Request.Url.AbsoluteUri.ToString(), DateTime.Now.ToString());
                sw.WriteLine(s);
                sw.Close();
            }
        }
    }
}

代码很简单,页面每次打开,都会在log/log.txt中追加一行记录,内容为“当前页的绝对网址+当前时间”
前端测试代码:
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeBehind = " Default.aspx.cs "  Inherits = " src._Default "   %>
<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head runat = " server " >
    
< title ></ title >
</ head >
< body >    
    
< img alt = " test "  src = ""   />    
</ body >
</ html >
F5运行,发现log.txt确实有二行记录(在IE,FF,Chrome下都是同样的结果)

如果把<img alt="test" src="" />   改成二个连续的img,即:
<img alt="test" src="" />  
<img alt="test" src="" />  
运行后,页面仍被执行2次

继续测试,把<img alt="test" src="" /> 改为  <img alt="sss" src="" onerror="this.src='http://www.baidu.com/img/baidu_logo.gif'"/>,即图片加载错误时自动加载百度的logo,保证最终src肯定有值
猜一下运行结果?
结果与不加onerror完全相同,页面仍然执行二次!(有点意外吧?哈...)

go on! 这回干脆把src=""都去掉,即改成<img alt="test" />,再次竞猜结果?
居然正常了,即仅执行了一次!(呵呵,看来多一事不如少一事)

最后再折腾一次,把src故意写成一个错误的地址,比如<img alt="test" src=" http://abc.asdf.werdafsaf.sadfasdfas.xxx.gif" />
结果正常,仅执行了一次!
结论:img标签的src=""时,会引起浏览器再次访问"./"即当前目录,如果该目录下有default.aspx,index.aspx等IIS的默认文档,则默认文档会执行2次

你可能感兴趣的:(load)