0

約 200 人のユーザーで codeigniter を使用する Web アプリケーションを使用しています。約 100 人のユーザーが同時にシステムにログインすると、ユーザーが自動的にログアウトするか、事前にログアウトをクリックせずにログイン ページにリダイレクトすることがあります。

私のコード。

Login Helper (Construst にロードしてログインの有無を確認)

function is_logged_in()
{
    //Get Codeigniter Instance
    $obj =& get_instance();

    $is_logged_in = $obj->session->userdata('LOGGED_IN');

    if(!isset($is_logged_in) || $is_logged_in != true)
    {   
        $obj->session->set_flashdata('message','<div class="error_login"><b>ERROR:</b> Silahkan login terlebih dahulu.</div>');

        //If no session, redirect to login page
        redirect('login', 'refresh');
    }

 }

コントローラ。

public function verify()
{
    $username = $this->input->post('username');
    $password = $this->input->post('password');

    //Query the database
    $row = $this->Loginmodel->verify($username,$password);

    if (count($row)) {

        $dataSession = array(
            'userid' => $row->userid,
            'role' => $row->role,
            'prov_cd' => $row->prov_cd,
            'kab_cd' => $row->kab_cd,
            'LOGGED_IN'=> true,
            'MODAL'=> true
        );

        $this->session->set_userdata($dataSession);

        redirect('dashboard','refresh');

    } 
    else
    {
         $this->session->set_flashdata('message','<div class="error_login"><b>ERROR:</b> Username atau password salah.</div>');
         redirect('login','refresh');
    }

}

セッションデータに多くのパラメータを格納しているからだと思います。ありがとう。

4

1 に答える 1

1

count($row) を見てください。

COUNT($row) == 1

$row が 0 のカウントを返す場合、単一のユーザー例を返す場合、ユーザー名パスワードは確認されませんでした。

== 1

ユーザー名は正しく、確認しました。この解決策を試してください。

PHPのドキュメントによると、ブール値のtrueまたはfalseを返しません。それを試してください。また、どのようなエラーが発生していますか?

また、さらなる実装のために、「配列内のすべての要素、またはオブジェクト内の何かをカウントする」を引用します。だから電話するだけ

COUNT($row) { // If it is true or not will not work

カウントが == 1 の場合は明示的に述べる必要があると思われます。そうであれば、クエリでリターンが得られたので、その人を続行させます。

さて、このトピックについてももう少し詳しく説明しますが、CI の観点からです!

セッションが設定されているかどうかも確認していないのではないかと思います...そして、MY_Controller 状況を作成することをお勧めします。それは非常に簡単で、トラブルを減らします...

このコードを見てください:

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class MY_Controller extends CI_Controller { // Create your custom controller
    public function __construct() {
        parent::__construct();
    }
}

次に、同じファイルで次の操作を行います。

class MY_logincontroller extends MY_Controller { // 上で作成したクラスを拡張します

public function __construct() { 
    parent::__construct();
    $this -> load -> model('login_model'); // Load your login model
    $loggedin = $this -> session -> userdata('loggedin'); // set your user information
    $username = $this -> session -> userdata('username'); // Set your user information

    if ((!isset($loggedin)) || ($loggedin != TRUE)) { // This will check if the the session variable is set or if it is equal to logged in, if not it will send to a access denied page
        $this -> session -> unset_userdata('loggedin'); // If access denied happens unset user data logged in (just to be sure) and destroy all other session stuff
        $this -> session -> sess_destroy();
        $this -> load -> view('messages/accessdenied_view');
        $this -> output -> _display();
        die();
    }
    $this -> output -> set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
    $this -> output -> set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    $this -> output -> set_header('Pragma: no-cache');
    $this -> output -> set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
}

うまくいけば、これでいくつかの問題が解決します

于 2013-04-17T11:43:33.070 に答える