thinkphp存储的cookie/session值被替换为favicon.ico

访问地址: 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服务器的重定向规则 增加判断排除 这个因人而异

以上就是原因和解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值