「Disallowed Key Characters.」エラーがCodeigniter v2で発生した

はじめに

デザイナーさんから、「エラーが出てページが表示されないの!」と連絡が来て調査を開始しました。

 

「Disallowed Key Characters.」エラー

発生したエラーは以下になります。

 

特定のページを閲覧後に発生

普段は特に問題なく表示されていました。

デザイナーさんが新規で作成したページにアクセス後、エラーが発生するようになりました。

 

エラーを検索してみると結構引っかかる

エラーを検索してみると、結構同様の現象が発生しているようです。

 

原因はCookie

結果から言うと原因はCookieでした。

もっというと、Google アナリティクスを2つ使用していたため、妙なKeyのCookieが発行されたためエラーが発生していました。

 

対応

原因の箇所は system/core/Input.php_clean_input_keys()です。

直接このファイルを修正してしまうと、アップデートをするたびに修正する必要がでてしまいます。

 

なので、application/coreMY_Input.php というファイルを作成します。

そして中身に以下の書き込みをします。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

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

        // Clean UTF-8 if supported
        if (UTF8_ENABLED === TRUE)
        {
            $str = $this->uni->clean_string($str);
        }

        return $str;
    }
}

これで問題は解決できます。

 

まとめ

原因はCookieKeyでした。

発生源はGoogleアナリティクスでした。
古いアナリティクスを継続的に使用しているサイトで、アナリティクスタグを重複記載していると発生してしまいます。

一度発生してしまうと、ユーザー側にCookieを破棄してもらうか、Cookieの期限が来るまで、サイトにアクセスできなくなります。

今回の修正で、上記のユーザーに作業をさせることなくアクセスが可能になります。

 

今日はこの辺でー

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-CodeIgniter
-