【问题标题】:Creating a session with a unique ID for 1 hour - PHP创建一个具有唯一 ID 1 小时的会话 - 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')){ newSession}else{session is open!}跨度>
  • 看这里,具体是session_set_cookie_params(),你要的参数是lifetime。 php.net/manual/en/ref.session.php
  • @DIEGOCARRASCAL,如果您使用的是 PHP 会话,那就不是这样了。
  • 您不需要弄乱唯一的会话 ID。使用 PHP 会话时,它会处理所有 ID,这些 ID 始终是唯一的。您真正想要的是会话在 1 小时后过期。

标签: php session


【解决方案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 在上面的代码中为你处理了所有这些。
  • 对我帮助很大
猜你喜欢
  • 2017-04-20
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多