目次
はじめに
デザイナーさんから、「エラーが出てページが表示されないの!」と連絡が来て調査を開始しました。
「Disallowed Key Characters.」エラー
発生したエラーは以下になります。
特定のページを閲覧後に発生
普段は特に問題なく表示されていました。
デザイナーさんが新規で作成したページにアクセス後、エラーが発生するようになりました。
エラーを検索してみると結構引っかかる
エラーを検索してみると、結構同様の現象が発生しているようです。
原因はCookie
結果から言うと原因はCookieでした。
もっというと、Google アナリティクスを2つ使用していたため、妙なKeyのCookieが発行されたためエラーが発生していました。
対応
原因の箇所は system/core/Input.php
の_clean_input_keys()
です。
直接このファイルを修正してしまうと、アップデートをするたびに修正する必要がでてしまいます。
なので、application/core
に MY_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; } }
これで問題は解決できます。
まとめ
原因はCookieのKeyでした。
発生源はGoogleアナリティクスでした。
古いアナリティクスを継続的に使用しているサイトで、アナリティクスタグを重複記載していると発生してしまいます。
一度発生してしまうと、ユーザー側にCookieを破棄してもらうか、Cookieの期限が来るまで、サイトにアクセスできなくなります。
今回の修正で、上記のユーザーに作業をさせることなくアクセスが可能になります。
今日はこの辺でー