php类的方法session赋值,PHP中$_SERVER变量赋值给$_SESSION变量时的注意事项

感谢邀请,前面都回答得很好了。我补充几点:你的提问习惯很好,从“其中notice的值同notice中src的值,src的值改为其他值相应也会输出同样的值”这句话看,你自己研究了一下错误重复出现的规律,浏览器也同时开着《提问的艺术》,值得鼓励。

你的代码段截得不够严谨,这个要批评。第七行(img标签上面那一行)明显是个语法错误,应该是PHP结束"?>"符,编程世界里,差之毫厘,失之千里,如果不是语法错误,编译器不报错,你可就浪费热心人的时间了

具体来分析你这段代码:

此时,服务器端session文件内容如下:

bVHGV

对第一个HTTP请求(http://localhost/test.php/a),页面显示“Notice: Undefined index”是因为刚刚session_start()之后没有为$_SESSION['test']赋值就去打印它,必然是不存在这个数组下标的,故报错。

接着,把当前的PATH_INFO(即"/a"存入了session文件中),并输出出来,这就是你在浏览器中肉眼看到的效果了。

由于浏览器遇到了img标签,于是,根据src属性又去请求了http://localhost/test.php/notice(请自行参阅src的相对路径,我就不细说了),这个请求是浏览器在后台进行的,它不会改变当前页面的HTML源码,所以,你看不到页面上有什么变化。

test.php实际又被执行了一遍,对第一个var_dump(),它输出“/a”,接着,它把当前的PATH_INFO(即/notice)赋值给$_SESSION['test'],覆盖了session文件的原值(参见上面的截图),然后再执行第二个var_dump()。这些var_dump()的输出在哪里呢?在“http://localhost/test.php/notice”这个HTTP请求的Response里面,这些文本输出显然不是一个合法的图片,所以你的img标签会显示失败。

两个HTTP请求的证据:

bVHHt

可以看到,两个HTTP请求得到的Reponse Body不一样长的(149 Bytes vs 61 Bytes),因为请求http://localhost/test.php/notice时没有“Notice: Undefined index”报错了。

第二次刷页面的时候,还是两个HTTP请求:

最终你看到的页面如下:

bVHHk

第一个HTTP请求(http://localhost/test.php/a):先打印“/notice”(在session文件里能取出了,参见截图),然后用当前PATH_INFO(“/a”)覆盖之,再打印“/a”。

接着浏览器自动发起第二个HTTP请求(http://localhost/test.php/notice):先在后台打印"/a",再赋值“/notice”,再打印"/notice",由于不是合法的图片内容显示失败,你在页面上也看不到变化。

第3至N次跟第二次刷新页面的过程完全一样。

最后:

建议你加调试技能,刷新页面的时候多看HTTP通信的文本内容,多看session文件内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值