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

为1小时创建具有唯一ID的会话-PHP,php,session,Php,Session,我正在尝试为用户创建持续1小时的会话ID 用户登录一次-生成随机ID-添加到会话 用户在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; $

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

用户登录一次-生成随机ID-添加到会话

用户在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小时的超时?我见过使用cookies的例子。我希望能够只使用服务器端会话


有什么想法吗?

如果您希望将随机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']);

如果希望将随机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']);

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

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


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

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


文档:

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

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


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

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



医生:

只是好奇:你为什么这么做?-->
$\u SESSION['sessionid']=$\u SESSION['sessionid']
。您必须获取用户名和密码之类的内容并将其存储,然后检查该组合是否存在于任何会话中,如果存在,则检查会话是否“活动”(
如果($startDate+1小时)>日期('YmdHi'){newSession}否则{会话已打开!}
看看这里,特别是
会话\u设置\u cookie\u参数()
,您想要的参数是
生存期
@diegocarascal,如果您使用的是PHP会话,则不是这样。您不需要处理唯一的会话ID。在使用PHP会话时,它会处理所有ID,这些ID总是唯一的。您真正想要的是会话在1小时后过期。只是好奇:您为什么这样做?-->
$\u SESSION['sessionid']=$\u SESSION['sessionid']
。您必须获取用户名和密码之类的内容并将其存储,然后检查该组合是否存在于任何会话中,如果存在,则检查会话是否“活动”(
如果($startDate+1小时)>日期('YmdHi'){newSession}否则{SESSION打开!}
看看这里,特别是
会话\u设置\u cookie\u参数()
,您想要的参数是
life
@diegocarascal,如果您使用的是PHP会话,则不需要弄乱唯一的会话ID。使用PHP会话时,它会处理所有ID,这些ID总是唯一的。您真正想要的是会话在1小时后过期。仅供参考。无需弄乱ID。PHP句柄在上面的代码中为您提供了所有这些。它真的帮了我很多忙。不需要弄乱ID。PHP在上面的代码中为您处理所有这些。它真的帮了我很多忙将
3600
更改为
10
看到它在10秒后刷新。谢谢。我只需要在第一个输入页上使用它吗?如何将此值传递到第二页(第1页的用户单击第2页的url-会话必须保持不变)?您需要在每个使用该代码的页面上包含该代码。因此,如果用户访问
page1.php
,则在一小时后他访问
page2.php
,并且您希望更新该代码,则在第1页和第2页上都需要该代码。将
3600
更改为
10
请在10秒后刷新。Thanks.我是否只需要在第一个输入页面上有这个值?我如何将这个值传递到第二个页面(第一个页面上的用户单击第二个页面的url-会话必须保持不变)?您需要在使用该代码的每个页面上包含该代码。因此,如果用户访问
page1.php
,一小时后他访问
page2.php
,并且您希望更新该代码,则在第1页和第2页上都需要该代码。