php ログインでセッションが切れる
PHPでログインする機能があります。
ログインして操作をしていると問題はないのですが、数分(測っていないのですが5分~10分)操作をせず放置しているとログインが切れてしまいます。
セッションの有効期限は24時間にしています。
確認してもセッションの有効期限はログインを行って24時間にちゃんとなっています。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
try {
// POSTで受け取ったパラメータを変数として展開
extract(filter_struct_utf8(INPUT_POST, array(
'email' => FILTER_STRUCT_FULL_TRIM, // トリミング
'pass' => '',
'token' => '',
)));
// トークンをチェック
Token::check($token);
// IDをセッションに取得
$_SESSION['id'] = DB::connect()->userlogin($email, $pass);
// セッションハイジャック対策
session_regenerate_id(true);
// リダイレクト
redirect();
} catch (Exception $e) {
$errors = exception_to_array($e);
}
}
『userlogin』の部分
public function userlogin($email, $pass)
{
// 例外初期化
$e = null;
// メールアドレスチェック
if ($mail === '') {
$e = e('メールアドレスが入力されていません。', $e);
}
// パスワードチェック
if ($password === '') {
$e = e('パスワードが入力されていません', $e);
}
// 1つでも例外が発生していればスローする
if ($e) {
throw $e;
}
// プリペアドステートメントを生成
$stmt = $this->pdo->prepare(implode(' ', array(
'SELECT `id`, `pass`',
'FROM `users`',
'WHERE `email` = ?',
'LIMIT 1',
)));
// 値をバインドして実行
$stmt->execute(array($email));
// 見つかったかどうかチェック
if (!$stmt->rowCount()) {
throw e('そのメールアドレスは登録されていません。');
}
// パスワード照合
$row = $stmt->fetch();
if ($row['pass'] !== password_hash($pass)) {
throw e('パスワードが違います。');
}
// IDを返す
return (int)$row['id'];
}
ログイン処理に問題があるのでしょうか?
それともサーバー側の設定(php.ini)なども何か設定を行ったほうがよいのでしょうか?
確認すべき点などございましたらアドバイスいただけませんでしょうか。
よろしくお願い致します。
補足
回答ありがとうございます。 書いてくださった中で $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) { とありますが、session['ip']とはなんでしょうか? どういう意味がありますか?