Hola.
Pues la única solución que yo veo es guardando el serial en un archivo que se lea y escriba desde PHP, eso si no quieres utilizar una base de datos.
Yo utilizo algo parecido, pero para generar un ID de transacción incremental para agrupar varios registros ne una base de datos, pero ese código te puede servir para tu propósito:
Código PHP:
// El archivo que contiene el serial se llama ".translog", y si no existe, el mismo algoritmo lo genera.
if(!file_exists('.translog'))
file_put_contents('.translog', '000000');
else
{
if(!$transaccion = file_get_contents('.translog'))
$transaccion = 'ERR-' . time();
}
$transaccion = strtoupper($transaccion);
if(!preg_match('/[^0-9^A-F]+/', $transaccion))
{
$transaccion = dechex(hexdec($transaccion) + 1);
for($i = strlen($transaccion); $i < 6; $i++)
$transaccion = '0' . $transaccion;
file_put_contents('.translog', $transaccion);
}
La direferencia es que ese "serial" que uso es hexadecimal, ya que como se generan cada segundo, no puedo utilizar muchos caracteres. Por eso algunas de las validaciones que hay ahí son para validar la misma cadena hexadecimal.