PHP:确定会话过期

问题描述 投票:0回答:1

我在网上看了很多文章,但没有一篇能回答我的问题。这是一个简单的问题。我想解决这个问题:

  1. 用户启动表单和 PHP 会话
  2. 用户前进几页
  3. 用户出去吃晚饭,几个小时后返回
  4. 会话已过期

我想抛出一条消息,指出“您的会话已过期”。但是,从未访问过我的网站并启动相同表单的用户现在也会显示错误消息,因为他的会话也是新的。

我尝试了

$_SERVER['HTTP_COOKIE']
,其中包含sessionid。如果设置了该变量,我可能会假设用户尝试继续该会话(但无法再检索它)。因此,当我开始会话并且它是空的时,我是否知道他是一位老朋友,正在尝试重新连接?

基本问题:如何区分新用户/会话和 gc 删除其会话文件后返回的用户?

谢谢,埃里克。

php session garbage-collection sessionid
1个回答
0
投票

您可以使用 $_SESSION 和 $_COOKIE 的组合来做到这一点。

<?php
session_start();

$cookieName = 'user_id';

//Check if the session has started 
//or not
if (isset($_SESSION['started'])) {
  // Session exists, proceed with 
  //normal operation
  echo "Welcome back!";
} else {
 // Session does not exist, check 
 //if the cookie is present
 if (isset($_COOKIE[$cookieName])) 
  {
    // Cookie exists but session 
    //does not, meaning the session 
    //has expired
    echo "Your session expired";
   } else {
    // No session and no cookie, 
    //it's a new user
    // Set a new session and a new 
    //cookie
    $_SESSION['started'] = true;
    $uniqueId = uniqid();
    //Generate a unique ID as you 
    //prefer
    setcookie($cookieName, 
      $uniqueId, time() + (86400 * 
       30),"/"); // 30 days expiry
    echo "New user";
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.