あなたの機能は言う示されていない:「ユーザーではない場合エラーメッセージを表示してエラーを記録し、それ以外の場合はsess_destroy()でユーザーをログアウトしてください。
このページにアクセスしてログインしていないと、エラーが表示されます。ページにアクセスし、あなたがログインしている場合、関数はsess_destroyを呼び出し、ログアウトします。
明確化:あなたのコードでは1つのユーザー状態のみが許可されています:ログアウトされているため、ページに出力される唯一の方法です。ログインしているユーザーがそのページにアクセスすると、すぐにログアウトされます。
if($this->session->userdata('email')){
//the user is logged in
echo "HELLO USER, YOU ARE LOGGED IN!";
}else{
//you don't need session_destroy because
//they won't get here with a session to be destroyed
redirect('/home');
}
さらに明確化:私はCodeIgniterのの新規インストールでこれをテストし、私が説明したように、それが動作します。時間を節約するために、デフォルトのウェルカムコントローラを変更
:あなたは歓迎/インデックスにアクセスすると
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->library('session');
}
function index()
{
$this->session->set_userdata("user","1234");
echo "userdata set to: ".$this->session->userdata("user"). "<br>";
echo "<a href='welcome/checksess'>check session</a>";
}
function checksess()
{
if (!$this->session->userdata("user"))
{
$error = "User do logout without been logged [" . $_SERVER['REMOTE_ADDR'] ."]" ;
log_message('error', $error);
show_error($error);
}
else
{
echo "userdata: ".$this->session->userdata("user"). " about to be destroyed with sess_destroy<br>";
$this->session->sess_destroy();
echo "<a href='checksess'>check session again after sess_destroy (refresh this page)</a>";
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
それはセッションデータを設定します。チェックレスのリンクをクリックすると、チェックサムエコーのuserdataがsess_destroyを呼び出します。チェックレスを更新すると、userdataは設定されず(sess_destroyのため)、「ユーザーはログアウトせずにログアウトします...」というエラーが表示されます。
発生した動作を説明するためのコードには何もありません。
オンラインチャットアプリケーションでCIセッションライブラリを使用しようとすると予期しない動作が発生しています。私は最終的にネイティブのPHPセッションを使用するように切り替えました。私はあなたがそのようなバグを見つけたと思う。良いキャッチ;それはいくつかの有用な洞察を提供するかもしれません。 –