警告全文如下:

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的一个警告相关推荐

  1. 什么是Cookie和Session?—— Cookie和Session的区别?—— 一文教你理解清楚什么是Cookie和Session,以及常见的开发面试问题?

    cookie和session区别 cookie和session 背景说明 1.cookie 1.1.定义 1.2.作用 1.3.组成(种类和参数) 1.3.1.会话 Cookies .永久性 Cook ...

  2. java session 作用范围_ssm项目session使用及其作用域问题

    这两天由于自己在前端用到ajax发起异步更新请求,发现ajax会暴露后端的接口地址,这个问题当然是避免不了的啦,前端都是明文.可怜于是就在百度.谷歌.QQ群里各种查询各种提问题,都说只能通过安全验证去 ...

  3. Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案

    文章目录 Cookie VS Session VS Token History Cookie Session Token Session不一致问题 Session不一致解决方案 nginx sessi ...

  4. ajax得到session,Ajax如何使用Session

    在Ajax中有时会使用到Session,在aspx.cs文件这样获取: string name = Session["name"]; 但是在Ajax中就不能这样获取Session, ...

  5. java session创建_request创建session

    如何在 Java 中创建 session ? 使用request对象获取session,然后进行操作. 1,引入包servlet-api.jar . 2,使用request获取session:Http ...

  6. 会话Cookie及session的关系(Cookie Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  7. PHP 分布式集群中session共享问题以及session有效期的设置

    一.Session的原理 以下以默认情况举例: session_start();之后,会生成一个唯一的session_id,每一个用户对应唯一一个session_id,每一个session_id对应服 ...

  8. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    转载自  Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...

  9. php session 效率,大量php session临时文件带来的服务器效率问题

    早上流量有点大,网站出口流量大概5M左右,访问质量却不太好,Web响应比较慢,切系统负载很高. 检 查了下各web节点,所有web服务器的httpd线程均达到满负荷,很奇怪.因为所有web节点都通过n ...

最新文章

  1. Git安装与Github基本使用(完整版 for mac)
  2. 【Win 10 应用开发】获取本机的IP地址
  3. java中如果写设置密码,在java中编写一个多字母换位密码[关闭]
  4. 正则表达式的汉字匹配
  5. hdu2222(看一些单词哪些在模式串中出现过)
  6. 使用juniversalchardet做字符编码识别
  7. EPOLLOUT/EPOLLIN事件触发的条件
  8. 2021年国货彩妆品牌推广营销趋势
  9. 黑客成功破解 PlayStation 4 支持运行 Linux
  10. 从偶然的机会发现一个mysql特性到wooyun waf绕过题
  11. 【Love2d从青铜到王者】第十四篇:Love2d之分享你的游戏(Distributing your game)
  12. Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据
  13. 无人机视觉检测算法研究及数据集汇总
  14. 攻防世界 reverse reverse-for-the-holy-grail-350
  15. THINKPHP网站漏洞怎么修复解决
  16. 电脑剪切后丢失的文件怎么恢复
  17. windows10系统怎么快速截屏
  18. C++:编程题:魔兽世界之一:备战
  19. 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
  20. GOF设计模式之单例模式

热门文章

  1. java动态代理二cglib
  2. foxpro:将表写入excel
  3. ubuntu18.04安装mysql数据库
  4. 伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...
  5. 镜像上传到linux失败,Docker push镜像失败解决方法
  6. linux系统页面缓存,Linux缓存机制之页缓存
  7. 高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”
  8. C语言里if语句变量作为判断条件,C语言教学(九-上)if else判断语句
  9. tableau 倒序都倒了_Tableau优秀作品拆解复刻01-是时候终结瘘管病了
  10. 【原】webpack--loaders,主要解释为什么需要loaders和注意事项