PHP – завершение сеанса после X минут

Я использую следующий метод …

Из login.php сообщения формы на страницу check.php где я делаю это

 <?php $uzer = $_POST['user_name']; $pass = $_POST['user_pass']; require ('DB_connection.php'); $result = mysql_query("SELECT * FROM accounts WHERE user_Name='$uzer' AND user_Pass='$pass'"); if( mysql_num_rows( $result ) > 0) { $array = mysql_fetch_assoc($result); session_start(); $_SESSION['user_id'] = $uzer; header("Location:loggedin.php"); } else { header("Location:login.php"); } ?> 

и на странице loggedin.php первое, что я делаю, это

 <?php session_start(); if( !isset( $_SESSION['user_id'] ) ) { header("Location:login.php"); } else { echo ( "this session is ". $_SESSION['user_id'] ); //show rest of the page and all } ?> 

но после входа в систему, когда я непосредственно localhost\myProject\loggedin.php url localhost\myProject\loggedin.php он отображает страницу … что имеет смысл, потому что сеанс запущен

что я хочу реализовать

  • Прямой URL \ сеанс работает в течение 10 минут после того, как сеанс завершается \ expired \ timed out, а затем используется для повторного входа в систему и может получить тот же идентификатор сеанса, но через 10 минут использование не сможет просматривать с той же сессией

ЧТО НУЖНО СДЕЛАТЬ ИЛИ УЧИТЬСЯ

Храните временную метку в сеансе:

 <?php $uzer = $_POST['user_name']; $pass = $_POST['user_pass']; require ('DB_connection.php'); // Hey, always escape input if necessary! $result = mysql_query(sprintf("SELECT * FROM accounts WHERE user_Name='%s' AND user_Pass='%s'", mysql_real_escape_string($uzer), mysql_real_escape_string($pass)); if( mysql_num_rows( $result ) > 0) { $array = mysql_fetch_assoc($result); session_start(); $_SESSION['user_id'] = $uzer; $_SESSION['login_time'] = time(); header("Location:loggedin.php"); } else { header("Location:login.php"); } ?> 

Проверьте, находится ли метка времени в разрешенном временном окне (600 секунд – 10 минут):

 <?php session_start(); if( !isset( $_SESSION['user_id'] ) || time() - $_SESSION['login_time'] > 600) { header("Location:login.php"); } else { // uncomment the next line to refresh the session, so it will expire after ten minutes of inactivity, and not 10 minutes after login //$_SESSION['login_time'] = time(); echo ( "this session is ". $_SESSION['user_id'] ); //show rest of the page and all } ?> 

Я бы посмотрел на session_set_cookie_params и ini_set("session.gc_maxlifetime", "18000");