7 votes

PHP - faire expirer la session après X minutes

J'utilise la technique suivante...

A partir de la login.php le formulaire s'affiche sur la page check.php où je fais cela

<?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");
}
?>

et sur loggedin.php page la première chose que je fais est

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

mais une fois connecté, lorsque je tape directement l'url localhost\myProject\loggedin.php il affiche la page... ce qui est tout à fait logique puisque la session a démarré

Ce que je veux mettre en œuvre, c'est

  • La session d'URL direct fonctionne pendant 10 minutes, après quoi la session est interrompue. \expired\timed et l'utilisateur doit alors se connecter à nouveau et peut obtenir le même identifiant de session, mais après 10 minutes, l'utilisateur ne pourra plus naviguer avec la même session.

QUE DOIS-JE FAIRE OU APPRENDRE ?

10voto

Lekensteyn Points 22873

Enregistre un horodatage dans la session :

<?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");
}
?>

Vérifier si l'horodatage est compris dans la fenêtre temporelle autorisée (600 secondes correspondent à 10 minutes) :

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

1voto

Kyle Points 912

Je regarderais session_set_cookie_params y ini_set("session.gc_maxlifetime", "18000");

1voto

Kishan Chauhan Points 982

Utilisez la fonction session set cookie dans votre fichier php où vous démarrerez la session, elle expirera au bout de x minutes.

session_set_cookie_params(600);

Comme indiqué ci-dessus, la session expire au bout de 10 minutes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X