10

最近、codeigniterを使用してWebアプリケーションを開発しました。私はそこでセッション関連の問題にひどく直面しています。

問題のシナリオ:

ユーザーAがアプリケーションにログインした場合、セッションで設定されたユーザーID。タスクを実行した後、ユーザーAはブラウザーを閉じて、コンピューターを離れます。しばらくして、ユーザーBが来てブラウザーを開き、アプリケーションがログイン状態になっていることを確認しました。または、ユーザーBがURLを書き留めてEnterキーを押すと、前のセッションを使用して認証なしでアプリケーションに直接リダイレクトされます。

セッションには次の構成を使用しました。

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 1800;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

今私の質問は、codeigniterでブラウザまたはブラウザタブを閉じることですべてのセッションを破棄するにはどうすればよいですか?

4

10 に答える 10

8

config.phpファイルを編集して、に設定sess_expire_on_closetrueます。

例えば

$config['sess_expire_on_close'] = TRUE;
于 2013-10-28T07:55:31.950 に答える
6

javascriptとasynchronリクエストを使用できます。ウィンドウを閉じると、window.onunloadのハンドラーが呼び出されます

var unloadHandler = function(e){
        //here ajax request to close session
  };
window.unload = unloadHandler;

リダイレクションの問題を解決するために、php側ではカウンターを使用できます

  class someController  extends Controller {

   public function methodWithRedirection(){

        $this->session->set_userdata('isRedirection', 1);
        //here you can redirect  
   }
}
class homeController extends Controller{
   public function closeConnection(){
        $this->load->library('session');
        if($this->session->userdata('isRedirection')!== 1){
            //destroy session
         }
      }
   }  
于 2012-11-01T10:20:38.793 に答える
3

ログアウトボタンを追加します。

そのボタンで、CIに組み込まれている破棄機能を使用してセッションを破棄します。

$this->session->sess_destroy();
于 2013-07-16T19:55:37.360 に答える
2

これを見て、これが役立つかどうかを確認してください。

https://github.com/EllisLab/CodeIgniter/wiki/PK-Session

于 2012-11-02T15:10:48.077 に答える
2

さて、あなたがすでに解決策を持っているかどうかはわかりませんが、CodeIgniterバージョン3.0で同じシナリオに自分自身を見つけました。でconfig.phpSession Variablesセクションに移動すると、次のように設定できます。

$config['sess_expiration'] = 0;

sess_expiration:セッションを継続させたい秒数。有効期限が切れないセッション(ブラウザが閉じられるまで)が必要な場合は、値をゼロに設定します:0

于 2015-04-06T20:13:13.327 に答える
1

$config.phpファイル 内

change  $config['sess_expiration'] = 7200;

$config['sess_expiration'] = 0;
于 2016-08-18T06:05:05.230 に答える
1

Codeigniterのドキュメントに記載されているようにファイルに設定sess_expiration =0するだけですapplication/config/config.php

于 2019-06-28T07:19:34.763 に答える
0

一般的な構成ファイルapplication/config / config.phpを開き、 $ config['<strong>sess_expiration']を検索します。

変化する

$config['sess_expiration'] = 7200;

$config['sess_expiration'] = -1;
于 2015-08-26T22:15:32.400 に答える
0

CI-3.0.4の場合、「config.php」内で以下の項目を見つけ、それに応じて設定します

$config['sess_expiration'] = -1;
$config['sess_time_to_update'] = -1;
于 2016-03-07T08:54:31.370 に答える
0

私はこのように使用します。これはあなたを助けることができますか?

変化する

$config['sess_expiration'] = 7200;

上記のコードの結果は次のとおりです。

ここに画像の説明を入力してください

$config['sess_expiration'] = time() + 7200;

そして、変更された行の結果は次のとおりです。

ここに画像の説明を入力してください

これで、ブラウザウィンドウを閉じると、セッションが自動的に削除されます。

于 2021-08-10T18:07:40.793 に答える