访问地址: a.com/register/4.html
route配置:'register/:sid?'=>'admin/account/register'
服务器重定向:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
function register($sid=0){
if($sid){
cookie('sid',$sid);
}
}
查看cookie的结果居然是favicon.ico
通过浏览器的调试模式发现 cookie是先正确存储 然后又被存储为了favicon.ico
直觉是访问了两次register 导致存储出了问题
查看web服务器的访问日志
127.0.0.1 - - [14/Nov/2018:15:35:56 +0800] "GET /register/5.html HTTP/1.1" 200 9331
127.0.0.1 - - [14/Nov/2018:15:35:56 +0800] "GET /captcha.html HTTP/1.1" 200 778
127.0.0.1 - - [14/Nov/2018:15:35:57 +0800] "GET /register/favicon.ico HTTP/1.1" 200 9331
很显然有两次请求;
下面排位为什么会多出这个请求
排查出来原因是多方面的 解决办法也是多方面的,前端出现的请求导致出错 说明还是服务端做的不够完美呀
<link rel="Shortcut Icon" href="favicon.ico" />
这个是告诉浏览器favicon.ico的位置 给的是一个相对地址结合我们当前的访问地地址 浏览器自然而然的就去发送第二个请求了 而第二个请求地址又会触发我们定义的web服务器重定向规则 然后访问我们的代码 导致cookie被覆盖
原因找到下面是解决办法
1.直接去掉html代码 只要在网站根目录存有网站图标 是会在浏览器直接显示的
2.将路径改为绝对路径
<link rel="Shortcut Icon" href="/favicon.ico" />
3.修改web服务器的重定向规则 增加判断排除 这个因人而异
以上就是原因和解决办法