2016-05-17 8 views
1

私はあなたに助けを求める、私は私の問題を説明します。私のUser()クラスでは、ログインしてセッションを記録し、Cookieを設定するための小さな関数を書きました。ここでユーザーログインのセッションが失われました

それは次のとおりです。ここ

public function login($username, $password) { 
    $this->db->query("SELECT * FROM users WHERE username = :username AND status = :status LIMIT 1"); 
    $this->db->bind(':username', $username); 
    $this->db->bind(':status', 1); 
    $row = $this->db->single(); 
    $count = $this->db->rowCount(); 
     if ($count > 0) { 
      if (password_verify($password, $row['password'])) { 
       $this->setSession($row); 
       return true; 
      } else { 
       return false; 
      } 
     } 
} 

public function setSession($row) { 
    $_SESSION['session'] = [ 
     'id' => $row['id'], 
     'username' => $row['username'], 
     'email' => $row['email'] 
    ]; 
    //set cookie 
    setcookie("name_cookie", md5($_SESSION['session']['username']/$_SESSION['session']['password']), time()+3600 * 24 * 365); 
} 

そして機能は、ユーザが接続されているかどうか、チェックするためにページを保護するためのものです:

public function isLoggedIn() { 
    if(isset($_SESSION['session'])) { 
     return true; 
    } 
    return false; 
} 

私の問題は次のようになりますが、その場合でも、クッキー残念ながら、合計時間経過後のセッションは終了します。

私は1年にクッキーを設定しましたが、私が言ったように、しばらくするとユーザーのログインセッションは終了します。どうすれば修正できますか?

+0

session_start()コードはどこですか? –

+0

includes/config.phpにあります。ログは約40分続くことができます。その後、再度ログインする必要があります。 –

+0

なぜsetcookie関数を使用しましたか? PHPは自動的にPHPSESSIDをcookie変数に設定します。 setSession関数のセッション変数をprint_rだけで印刷するだけです。 –

答えて

0

PHPセッションはサーバーレベルで期限切れになります。デフォルトは約20分です。これはphp.iniの設定で制御できます。

setcookieを使用して、Cookieをユーザーのブラウザに保存し、PHPの変数$_COOKIEを使用してチェックすることができます。 setcookieを参照してください。

ただし、このセキュリティ上のリスクに注意してください。誰でもCookieを盗み、そのユーザーとしてサイトにアクセスできます。クッキーを保護するための良いアイデアは、found hereです。

+0

こんにちは、私はこれらの変更をしたいと思っています。 –

+0

現時点では、私のクラスは最低の安全要件を超えることができますか?私はそれがトップではないことを知っていますが、最小限を確実にしていますか? @Andreas Huttenrauch –

+0

私は最低でもお勧めします: (1)各顧客にユニークなハッシュを生成し、そのハッシュのみをクッキーに保存します。 (2)クッキーを使用してログインを作成するときは、再度使用することはできません –

関連する問題