1

ユーザーのセッションのタイムアウトに達したときに奇妙な動作をしている codeigniter コントローラー関数からいくつかの情報を取得する codeigniter ビュー内に JavaScript 関数があります。呼び出された php 関数内に、次のようなステートメントがあります。

  if (!$this->tank_auth->is_logged_in()) {
  redirect(site_url('login'));}

ログインしていない場合、これによりログインページにリダイレクトされます。ただし、JavaScript関数では、応答テキストを取得し、divの内容をそれに等しく設定します。

  xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", "mycontroller/myfunction/", false);
  xmlhttp.send();
  document.getElementById("mydiv").innerHTML=xmlhttp.responseText;

ユーザーがこの関数を呼び出したときにログアウトしている場合、ログイン ページにリダイレクトする代わりに、ログイン ページの responseText を返し、それを div に挿入します。これはひどく見えます。このページを見ているときにユーザーセッションがタイムアウトした場合、どうすればこれを停止できますか? 他のアプリケーションが依存しているため、タイムアウト制限を変更できません。

実際、これは codeigniter または tank_auth の問題ではありません。単に、最初にその関数を使用して responseText の文字列を生成しているときに、ajax 要求で呼び出されている php 関数からリダイレクトする方法です。

4

2 に答える 2

1

応答を解析し、期待する応答のタイプであるかどうかを判断する必要があります。特定の文字数未満が予想される場合は、長さを確認できますが、特定の dom オブジェクトまたは文字列を確認するほど信頼できない場合があります。

たとえば、次のことができます。

if(xmlhttp.responseText.length < 200) {
    document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
} else { 
    window.location.href = 'some url';
}

もう 1 つの方法は、ビューをロードする (または別のビューをロードする) 代わりに、CodeIgniter の AJAX 応答チェックを使用して別のことを行うことです。

if ($this->input->is_ajax_request())
{
    // do something else 
}
else
{
    // do what you were doing before
}

お役に立てれば!コードのいたるところに例外を追加しているように聞こえるので、PHP / CIメソッドを実行することをためらいます。ただし、それは完全にあなた次第です。

于 2012-09-11T14:05:43.577 に答える