目次
はじめに
デザイナーさんから、「エラーが出てページが表示されないの!」と連絡が来て調査を開始しました。
「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の期限が来るまで、サイトにアクセスできなくなります。
今回の修正で、上記のユーザーに作業をさせることなくアクセスが可能になります。
今日はこの辺でー