ie下php session不能用(域名的合法定义)
今天遇到了一个奇怪的问题。应用程序的后台ie下居然无法登陆,老是提示验证码不正确,明明输入是正确的。于是抓包、测试、调试,最终发现罪魁祸首phpsessionid在ie下没有办法写入。研究了一下,发现所有的cookie都没有办法写入,这就纳闷了,明明应用程序跑得好好的,怎么可能后台会这样出现这样的情况。google半天,各种办法(有说服务器session写不进去要改权限的,有说要加p3p头部的,也有说session_start放的位置不对的,还有说页面结束时要先session_write_close一下的),都试不成功。最后自己干脆写一个简单的文件,应用上传一个,后台上传一个对比一下结果。
<?php session_start(); var_dump($_SESSION); $_SESSION['iesession'] = 'ie'; echo session_id(); ?>
结果放在应用程序目录下的可以,放在后台的不行。思前想后,觉得只有域名不一样,其他的都是一样的环境。二话不说,后台改个域名看看,奇迹出现了,居然可以了。
查找原因,一个域名一个域名试,host一个一个绑定。最终原来是域名定义惹的祸。正确的域名应该是由26个字母、0-9 10个数字以及-,. 这两个符号构成,而我的后台域名
取了一个不标准的名字admin_control.frontcms.com,没错多了一个_。 对于不正确的域名ie直接不给写cookie。