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次
- ONOS集群选举分析
- OpenStack Spice协议配置
- 源码解读ODL的MAC地址学习(二)
- SpringBoot开发案例之整合Spring-data-jpa进阶篇
- SpringBoot开发案例之微信小程序录音上传
- SpringBoot开发案例之微信小程序文件上传
- SpringBoot开发案例之配置静态资源文件路径
- 源码解读ODL的MAC地址学习(一)
- SpringBoot开发案例之配置Druid数据库连接池
- SpringBoot开发案例之mail中文附件乱码
- SpringBoot开发案例之整合Swagger篇
- SpringBoot开发案例之整合mail队列进阶篇
- SpringBoot开发案例之集成SSL证书
- SpringBoot开发案例之整合mail队列篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- elementUI中checekBox实现全选和反选以及实现在input中输入空格出现label分割
- centos 安装git
- centos 挂载硬盘
- centos 安装postgrep
- springboot集成PowerJob-openAPI和回调完整流程
- 使用 Redisson 实现的 redis 分布式锁在 SpringBoot 中的简单使用
- SpringBoot 的过滤器 Filter 配置
- CentOS 7 Redis 5.0.8 哨兵模式配置
- SpringBoot 项目的 Maven 多环境打包配置
- webRTC: 基于coturn项目的stun/turn服务器搭建
- 百度地图电子围栏功能
- opencv使用中出现的问题
- 人生苦短,我用k8s--------------Pod资源控制进阶管理
- 人生苦短,我用k8s--------------kuberctl命令合集
- Android使用Intent实现页面跳转