php session警告屏蔽,PHP Session的一个警告
警告全文如下:
PHP Warning: Unknown: Your script possibly relies on a session side-effect
which existed until PHP 4.2.3. Please be advised that the session extension does
not consider global variables as a source of data, unless register_globals is enabled.
You can disable this functionality and this warning by setting session.bug_compat_42
or session.bug_compat_warn to off, respectively. in Unknown on
关于这个问题, 网上有多种解决办法, 但都是不知所以然的答案, 那么真正的原因是什么呢, 怎么解决呢?
请首先记住这一点. 在PHP4.2开始, register_globals默认设置为了OFF.
在4.2.3以后, 为了兼容以前的模式, PHP引入了bug_compat_42, 当启用这个选项以后(默认启用), PHP将容许自动将SESSION中的变量做为全局变量使用. 只不过如果bug_compat_warn选项开启的情况下, 会报告这个特性的被使用.
来看一段代码,
session_start();
var_dump($_SESSION);
$name = 'laruence';
$_SESSION['name'] = null;
?>
上面的代码, 在bug_compat_42开启, register_globals关闭的情况下, 俩次刷新页面的输出, 分别为:
//第一次:
array(0) {}
//第二次
array(1) { ["a"]=> string(8) "laruence" }
为什么第二次不是NULL呢, 因为在bug_compat_42开启的情况下, PHP会认为变量a是$_SESSION['a']的一个引用, 在session_close的时候, 会把变量a的值回写.
而在这个过程中, 如果bug_compat_warn开启, 则会抛出文章开头的警告.
So, that it is~
那么, 它具体给出警告的条件是什么呢? 知道了这些条件, 我们就可以避免这个警告了,
在PHPSRC/ext/session/session.c中, 有我们想要的一切答案:
static void php_session_save_current_state(TSRMLS_D) /* {{{ */
{
int ret = FAILURE;
IF_SESSION_VARS() {
//如果存在Session数组
if (PS(bug_compat) && !PG(register_globals)) {
HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
HashPosition pos;
zval **val;
int do_warn = 0;
zend_hash_internal_pointer_reset_ex(ht, &pos);
while (zend_hash_get_current_data_ex(ht
, (void **) &val, &pos) != FAILURE) {
if (Z_TYPE_PP(val) == IS_NULL) { //变量为null
if (migrate_global(ht, &pos TSRMLS_CC)) {//变量回写
do_warn = 1;
}
}
zend_hash_move_forward_ex(ht, &pos);
}
if (do_warn && PS(bug_compat_warn)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Your script possibly
relies on a session side-effect which existed until PHP 4.2.3 ..........");
//后面省略
可见, 如果不开启bug_compat_42(现在很少用到这个特性, 开启的话有的时候反而会造成迷惑), 或者不开始bug_compat_warn, 或者在register_globals开启的情况下, 都不会看到这个警告.
另外, 如果开启bug_compat_42, 还可能遇到如下的NOTICE..
PHP Notice: Unknown: The session bug compatibility code will not try to
locate the global variable $324324 due to its numeric nature in Unknown on line 0
这是当你在$_SESSION中使用数字索引的时候, 可能会引发的警告.
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
php session警告屏蔽,PHP Session的一个警告相关推荐
- 什么是Cookie和Session?—— Cookie和Session的区别?—— 一文教你理解清楚什么是Cookie和Session,以及常见的开发面试问题?
cookie和session区别 cookie和session 背景说明 1.cookie 1.1.定义 1.2.作用 1.3.组成(种类和参数) 1.3.1.会话 Cookies .永久性 Cook ...
- java session 作用范围_ssm项目session使用及其作用域问题
这两天由于自己在前端用到ajax发起异步更新请求,发现ajax会暴露后端的接口地址,这个问题当然是避免不了的啦,前端都是明文.可怜于是就在百度.谷歌.QQ群里各种查询各种提问题,都说只能通过安全验证去 ...
- Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案
文章目录 Cookie VS Session VS Token History Cookie Session Token Session不一致问题 Session不一致解决方案 nginx sessi ...
- ajax得到session,Ajax如何使用Session
在Ajax中有时会使用到Session,在aspx.cs文件这样获取: string name = Session["name"]; 但是在Ajax中就不能这样获取Session, ...
- java session创建_request创建session
如何在 Java 中创建 session ? 使用request对象获取session,然后进行操作. 1,引入包servlet-api.jar . 2,使用request获取session:Http ...
- 会话Cookie及session的关系(Cookie Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- PHP 分布式集群中session共享问题以及session有效期的设置
一.Session的原理 以下以默认情况举例: session_start();之后,会生成一个唯一的session_id,每一个用户对应唯一一个session_id,每一个session_id对应服 ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
转载自 Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...
- php session 效率,大量php session临时文件带来的服务器效率问题
早上流量有点大,网站出口流量大概5M左右,访问质量却不太好,Web响应比较慢,切系统负载很高. 检 查了下各web节点,所有web服务器的httpd线程均达到满负荷,很奇怪.因为所有web节点都通过n ...
最新文章
- Git安装与Github基本使用(完整版 for mac)
- 【Win 10 应用开发】获取本机的IP地址
- java中如果写设置密码,在java中编写一个多字母换位密码[关闭]
- 正则表达式的汉字匹配
- hdu2222(看一些单词哪些在模式串中出现过)
- 使用juniversalchardet做字符编码识别
- EPOLLOUT/EPOLLIN事件触发的条件
- 2021年国货彩妆品牌推广营销趋势
- 黑客成功破解 PlayStation 4 支持运行 Linux
- 从偶然的机会发现一个mysql特性到wooyun waf绕过题
- 【Love2d从青铜到王者】第十四篇:Love2d之分享你的游戏(Distributing your game)
- Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据
- 无人机视觉检测算法研究及数据集汇总
- 攻防世界 reverse reverse-for-the-holy-grail-350
- THINKPHP网站漏洞怎么修复解决
- 电脑剪切后丢失的文件怎么恢复
- windows10系统怎么快速截屏
- C++:编程题:魔兽世界之一:备战
- 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
- GOF设计模式之单例模式
热门文章
- java动态代理二cglib
- foxpro:将表写入excel
- ubuntu18.04安装mysql数据库
- 伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...
- 镜像上传到linux失败,Docker push镜像失败解决方法
- linux系统页面缓存,Linux缓存机制之页缓存
- 高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”
- C语言里if语句变量作为判断条件,C语言教学(九-上)if else判断语句
- tableau 倒序都倒了_Tableau优秀作品拆解复刻01-是时候终结瘘管病了
- 【原】webpack--loaders,主要解释为什么需要loaders和注意事项