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

Posted

技术标签:

【中文标题】创建一个具有唯一 ID 1 小时的会话 - PHP【英文标题】:Creating a session with a unique ID for 1 hour - PHP 【发布时间】:2016-11-16 13:27:05 【问题描述】:

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

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

用户在 1 小时内再次登录,使用相同的 Session 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 的例子。我希望能够只使用服务器端会话?

有什么想法吗?

【问题讨论】:

只是好奇:你为什么要这样做? --> $_SESSION['sessionid'] = $_SESSION['sessionid']. 您必须获取用户名和密码之类的内容并将其存储,然后检查该组合是否存在于任何会话中,如果存在,请检查会话是否“活动”(if(($startDate + 1 hour) > date('YmdHi')) newSessionelsesession is open!跨度> 看这里,具体是session_set_cookie_params(),你要的参数是lifetimephp.net/manual/en/ref.session.php @DIEGOCARRASCAL,如果您使用的是 PHP 会话,那就不是这样了。 您不需要弄乱唯一的会话 ID。使用 PHP 会话时,它会处理所有 ID,这些 ID 始终是唯一的。您真正想要的是会话在 1 小时后过期。 【参考方案1】:

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

【讨论】:

3600改成10看10秒后刷新。 谢谢。我只需要在第一个条目页面上有这个吗?如何将此值带到第二页(第一页上的用户点击第二页的 url - 会话必须保持不变)? 您需要在使用该代码的每个页面上include 此代码。因此,如果用户访问page1.php,然后一小时后他访问page2.php,并且您希望更新代码,则在 page1 和 page2 上都需要此代码。【参考方案2】:

如果您希望会话在第一次访问后 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

【讨论】:

仅供参考。无需弄乱ID。 PHP 在上面的代码中为你处理了所有这些。 对我帮助很大

以上是关于创建一个具有唯一 ID 1 小时的会话 - PHP的主要内容,如果未能解决你的问题,请参考以下文章

创建具有唯一链接的环聊会话

PHP Sessions

从 PHP 中的 UUID 数组中获取唯一的哈希 ID

php Session配置

php Session配置

强制用户注销会话 PHP