zoukankan      html  css  js  c++  java
  • CI(CodeIgniter)的"Disallowed Key Characters."异常处理

    今天一朋友使用Chrome浏览网站报出了“"Disallowed Key Characters.”的异常,而且是每个页面都报。而且据朋友说是在Chrome的隐身模式下浏览却是正常的,因此怀疑是cookie的问题,经查怀疑是

    key:1354725667|8640980|43660|0|0|0 value:1354725667%7C8640980%7C43660%7C0%7C0%7C0

    造成的,因为删除这个cookie后浏览就正常了。起初我还以为是以为是缓存服务器出现了异常呢,但后来才知道是CI本身的问题。

    这和 CI 的字符串处理类设计有关,是这样的,通过get、post方法提交的字符串,CI 都交给 libraries/Input.php(CI2.0后的版本在system/core/Input.php) 这个类去处理,那很多人就问了,看url并没有特殊符号,为什么也报这样的错误,因为你忽略了一点,cookie 和 session 传输的字符串,也是由这个类统一处理的,也就是说,get、post、cookie、session 的数据都是由这个类处理的,问题往往也出现在 cookie 和 session 上面,所以网上有很多人提供方法就是,清除一下缓存和 cookie ,确实就没问题了,但是隔一段时间就又有问题了,因为新生成的 cookie 里面含有不被匹配通过的字符串,该怎么解决呢?

    解铃还需系铃人,既然问题出现在 Input.php 这个类上面,就修改他就好了,在Input.php中这样的一个函数:

    function _clean_input_keys($str)
    {
        if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
        {
            exit('Disallowed Key Characters.');
        }
    
        return $str;
    }

    就是它抛出的异常!

    因为是“key:1354725667|8640980|43660|0|0|0”导致_clean_input_keys异常的,只要把"|"加进来即可,即把正则

    /^[a-z0-9:_\/-]+$/i

    改成为

    /^[a-z0-9:_\/|-]+$/i

    改正后的方法为:

    function _clean_input_keys($str)
    {
        if ( ! preg_match("/^[a-z0-9:_\/|-]+$/i", $str))
        {
            exit('Disallowed Key Characters.');
        }
    
        return $str;
    }
  • 相关阅读:
    数组
    课堂验证性实验总结
    《大道至简》第二章读后感
    大道至简第一章伪代码
    大道至简
    python学习笔记1
    19maven依赖冲突
    18SSM资源整合2
    18SSM资源整合
    17mybatis注解开发
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4618210.html
Copyright © 2011-2022 走看看