Pour réduire encore un peu les risques de collision, tu pourrais te baser sur le principe du CSRF, à savoir générer un token unique (une valeur aléatoire), que tu mets en champs caché dans le formulaire, et que tu utilises comme clé dans ta session pour stocker la date de génération.
// $sel est une chaine statique
$token = md5(date('u').$sel);
$_SESSION['form'][$token] = date('u');
...
<input type="hidden" name="token" value="<?php echo $token ?>" />
...
Du coup, si l'utilisateur regénère le formulaire, eh bien il aura un nouveau token de généré, et s'il soumet l'ancien formulaire, tu retrouveras bien la bonne date de génération
$token = $_POST['token'];
$date_generation = array_key_exists($token, $_SESSION['form']) : $_SESSION['form'][$token] : null;
Là, tu as la date de génération de ce formulaire, sans aucun soucis

Et si la date n'existe pas en session, c'est qu'il a fait quelque chose de pas bien, mais il ne sera de toutes façon plus identifié ^^
Pour réduire encore un peu les risques de collision, tu pourrais te baser sur le principe du CSRF, à savoir générer un token unique (une valeur aléatoire), que tu mets en champs caché dans le formulaire, et que tu utilises comme clé dans ta session pour stocker la date de génération.
[php]// $sel est une chaine statique
$token = md5(date('u').$sel);
$_SESSION['form'][$token] = date('u');[/php]
[html]...
<input type="hidden" name="token" value="<?php echo $token ?>" />
...[/html]
Du coup, si l'utilisateur regénère le formulaire, eh bien il aura un nouveau token de généré, et s'il soumet l'ancien formulaire, tu retrouveras bien la bonne date de génération
[php]$token = $_POST['token'];
$date_generation = array_key_exists($token, $_SESSION['form']) : $_SESSION['form'][$token] : null;[/php]
Là, tu as la date de génération de ce formulaire, sans aucun soucis ;)
Et si la date n'existe pas en session, c'est qu'il a fait quelque chose de pas bien, mais il ne sera de toutes façon plus identifié ^^