代码之家  ›  专栏  ›  技术社区  ›  Erik

PHP:确定会话过期时间

  •  0
  • Erik  · 技术社区  · 1 年前

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

    1. 用户启动表单和PHP会话
    2. 用户前进几页
    3. 用户外出用餐,几个小时后回来
    4. 会话已过期

    我想发送一条消息,说明“您的会话已过期”。但是,从未访问过我的网站并开始使用相同表单的用户现在也会收到错误消息,因为他的会话也是新的。

    我试过了 $_SERVER['HTTP_COOKIE'] 其中含有固着物。如果设置了该变量,我可能会假设用户试图继续该会话(但无法再检索)。所以,当我开始会话时,它是空的,我知道他是一个老朋友,试图重新连接吗?

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

    谢谢你,埃里克。

    1 回复  |  直到 1 年前
        1
  •  1
  •   rover cj    1 年前

    您可以使用$_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";
       }
    }