今天看见有人因img的src为空导致session丢失,以前一直没注意这个,所以晚上特地写了一段代码验证:
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" %>
F5运行,发现log.txt确实有二行记录(在IE,FF,Chrome下都是同样的结果)
如果把 改成二个连续的img,即:
运行后,页面仍被执行2次
继续测试,把 改为 ,即图片加载错误时自动加载百度的logo,保证最终src肯定有值猜一下运行结果?结果与不加onerror完全相同,页面仍然执行二次!(有点意外吧?哈...)
go on! 这回干脆把class="lazyload" src="https://www.mshxw.com/file/upload/202104/18/171025490.png" data-original=""都去掉,即改成,再次竞猜结果?居然正常了,即仅执行了一次!(呵呵,看来多一事不如少一事)
最后再折腾一次,把src故意写成一个错误的地址,比如结果正常,仅执行了一次!
结论:img标签的class="lazyload" src="https://www.mshxw.com/file/upload/202104/18/171025490.png" data-original=""时,会引起浏览器再次访问"./"即当前目录,如果该目录下有default.aspx,index.aspx等IIS的默认文档,则默认文档会执行2次 .



