PHP - сделать сессии истекает через Х минут

голоса
6

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

Из 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 минут использования не будет иметь возможность просматривать с одной и той же сессии

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

Задан 22/09/2010 в 15:17
источник пользователем
На других языках...                            


2 ответов

голоса
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
}
?>
Ответил 22/09/2010 в 15:31
источник пользователем

голоса
1

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

Ответил 22/09/2010 в 15:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more