PHP - сделать сеанс истекает через X минут - PullRequest
6 голосов
/ 22 сентября 2010

Я использую следующую технику ...

Из 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
}
?>

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 22 сентября 2010

Сохранить отметку времени в сеансе:

<?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
}
?>
1 голос
/ 22 сентября 2010

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

...