创建一个具有唯一ID的会话1小时 - PHP

时间:2016-07-13 19:48:32

标签: php session

我正在尝试为持续1小时的用户创建会话ID。

用户登录一次 - 生成randomid - 添加到会话中。

用户在1小时内再次登录,适用相同的会话ID。

如果用户在1小时后登录,则生成新ID。

到目前为止,我有这个

session_start();  
//create random sid
$today = date('YmdHi');
$startDate = date('YmdHi', strtotime('2012-03-14 09:06:00'));
$range = $today - $startDate;
$rand = rand(0, $range);
$sid= ($startDate + $rand);

 //first time user

if(isset($_SESSION['sessionid'])) {

    $_SESSION['sessionid'] = $sid;

}
   //visiting user
else
    {
        $_SESSION['sessionid'] = $_SESSION['sessionid'];
     }

echo $_SESSION['sessionid']; 

如何添加超时1小时?我见过使用cookie的例子。我希望能够只使用服务器端会话?

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您希望会话在首次访问后600秒到期:

<?php
  $lifetime=600;
  session_set_cookie_params($lifetime);
  session_start();
?>

如果您希望会话在用户最近一次访问后600秒到期:

<?php
  $lifetime=600;
  session_start();
  setcookie(session_name(),session_id(),time()+$lifetime);
?>

文档:http://php.net/manual/en/book.session.php

答案 1 :(得分:2)

如果您希望将随机ID附加到一小时后刷新的会话,只需将上次生成的时间存储在会话中。

例如:

session_start();

function regenerate() {
    $_SESSION['code'] = uniqid();
    $_SESSION['code_time'] = time();
}

if (empty($_SESSION['code']) || time() - $_SESSION['code_time'] > 3600)
    //if there's no code, or the code has expired
    regenerate();

echo "Your code is " . $_SESSION['code'] . " it was generated on " . date('m/d/Y h:i:s a', $_SESSION['code_time']);