0

匿名ユーザーの設定をセッションに保存します。問題は、ユーザーがログインしたときに、以前のセッションをクリアして新しいセッションを開始する必要があることです (セキュリティ上の理由から)。

セッションを破棄すると、ログイン機能がログアウトするようです! ログインできなくなってから使っているのに(たぶん破壊set_userdata後のセッションが使えなくなる)。sess_destroy使用unsetすると、指定されたいくつかのセッションにのみ作用します。このような問題なく、ユーザーのすべてのセッションをクリアする方法はありますか?

public function login()
{
    if($this->session->userdata('id'))
        redirect($this->config->base_url());
    if($_POST)
    {
        ...
        $user=...
        if($user)
        {
            $this->session->sess_destroy();
            $this->session->set_userdata('id',$user['id']);
            ....
        }
        else
        {
            ....    
        }
    }
    $this->load->view('...');
}
4

2 に答える 2

0

を実行した後、セッション ライブラリを再初期化してみてくださいsess_destroy()

$this->session->sess_destroy();
$this->load->library('session');
$this->session->set_userdata('id',$user['id']);

アップデート:

CI には、残りのスクリプト ランタイムに影響を与えずにセッションをクリアするネイティブ機能がないようです。

ただし、根本的な原因を検索すると、手動で回答が得られました。

function unset_only() {
    $user_data = $this->session->all_userdata();

    foreach ($user_data as $key => $value) {
        if ($key != 'session_id' && $key != 'ip_address' && $key != 'user_agent' && $key != 'last_activity') {
            $this->session->unset_userdata($key);
        }
    }
}
于 2013-06-13T10:30:42.647 に答える
0

sess_destroy同じ URL に再度リダイレクトする予定がない限り、使用しないでください。ただ使う

$this->session->set_userdata('id','')

または、array破棄したいセッションを作成し、その値に null サンプルを追加するだけです

$test = array('session_id'=>'','session_id2'=>'');
$this->session->set_userdata($test);

これにより、セッションが名前session_idおよびsession_id2 NULLまたはで作成されますFALSE

呼び出すと、アプリが使用しているsess_destroy()すべてが破棄されるためです。session呼び出した後に別のセッションを追加しようとしても、アクティブなセッションがないため追加されません。そのため、機能しません。何度も試してみましたが、コントローラー/メソッドを更新またはリダイレクトして新しいセッションが作成される場合にのみ機能します。それがCIのセッションの仕組みです。間違っている場合は修正してください。

于 2013-06-13T10:39:44.370 に答える