如果用户15分钟不活动,如何使php会话过期

如果用户15分钟不活动,如何使php会话过期,php,session,Php,Session,我已经用PHP创建了一个项目,我正在其中管理会话 我正在config.php文件中通过编写以下代码行创建会话 session_start(); 为了破坏这个会话,我在logout.php文件中写了下面一行 session_destroy(); 我没有在任何其他项目文件中提到任何会话代码,但问题是会话一直处于活动状态,直到我调用logout.php 我想要的是,如果用户15分钟不活动,会话应该过期 有人能帮我吗,我是PHP新手,请给出一些示例代码或链接来实现这一点。你可以使用类似的东西 # S

我已经用PHP创建了一个项目,我正在其中管理会话

我正在config.php文件中通过编写以下代码行创建会话

session_start();
为了破坏这个会话,我在logout.php文件中写了下面一行

session_destroy();
我没有在任何其他项目文件中提到任何会话代码,但问题是会话一直处于活动状态,直到我调用logout.php

我想要的是,如果用户15分钟不活动,会话应该过期


有人能帮我吗,我是PHP新手,请给出一些示例代码或链接来实现这一点。

你可以使用类似的东西

# Session Logout after in activity 
function sessionX(){ 
    $logLength = 1800; # time in seconds :: 1800 = 30 minutes 
    $ctime = strtotime("now"); # Create a time from a string 
    # If no session time is created, create one 
    if(!isset($_SESSION['sessionX'])){  
        # create session time 
        $_SESSION['sessionX'] = $ctime;  
    }else{ 
        # Check if they have exceded the time limit of inactivity 
        if(((strtotime("now") - $_SESSION['sessionX']) > $logLength) && isLogged()){ 
            # If exceded the time, log the user out 
            logOut(); 
            # Redirect to login page to log back in 
            header("Location: /login.php"); 
            exit; 
        }else{ 
            # If they have not exceded the time limit of inactivity, keep them logged in 
            $_SESSION['sessionX'] = $ctime; 
        } 
    } 
} 
但是请记住,函数sessionX()必须在session_start()之后

请参阅详细信息

  ini_set('session.gc_maxlifetime',54000);  
  ini_set('session.gc_probability',1);
  ini_set('session.gc_divisor',1); 

在调用头文件中的session_start()函数之前使用此选项,这样每当用户在那个时候执行任何活动时,页面都会刷新并检查会话是否超时

function auto_logout($field)
{
    $t = time();
    $t0 = $_SESSION[$field];
    $diff = $t - $t0;
    if ($diff > 1500 || !isset($t0))
    {          
        return true;
    }
    else
    {
        $_SESSION[$field] = time();
    }
}
在标题中使用类似的内容

    if(auto_logout("user_time"))
    {
        session_unset();
        session_destroy();
        location("login.php");          
        exit;
    }       

User\u time是会话名称。我希望这个答案能对你有所帮助。这段代码的实际作用是:“检查差异是否大于1500秒。如果不大于1500秒,则设置新的会话时间。”您可以根据自己的要求更改时间差异(1500)。

我知道这是一个已回答的问题,但我只想分享我的经验,因为我觉得这是一种更简单的方法。我不确定这是不是最好的办法,但现在开始吧。我所做的是:

  • 当用户登录时,我将PHP会话($_Session['timeout'])设置为当前时间(time())

  • 编写以下函数以验证用户是否处于活动状态

  • 函数sessionTimeOut(){

    //此功能将在用户上次活动时,在先前注册的时间基础上增加900秒(15分钟,即您希望用户//处于非活动状态以自动注销的时间)//然后检查当前时间是否大于您希望用户//保持登录而不超时的时间(15分钟)。如果更大,则会将您重定向到//登录页面,在该页面中,您可以使用URL上的

    如果($_会话['timeout']+900>time()){

    }否则{

      // session timed out then redirect to login page
      header('Location:http://'. $_SERVER[HTTP_HOST] . '/login.php?status=timeout');
    
    }

    }


    最后:在检查用户是否登录后,在标题中调用sessionTimeOut();函数。这允许在用户每次刷新或导航到新页面时调用该函数。因此,它工作得很好(至少在我的情况下),实现了我的目的,所以我想我应该与你们分享。

    这是Kamal发布的内容的延续。我尝试了相同的代码,但通过如下修改使其正常工作:

    /* code */
    function fnlogout($field)
    {
        $t = time();
        if (!isset($_SESSION[$field]))
            $_SESSION[$field] = time();
        $t0 = $_SESSION[$field];
        $diff = $t - $t0;
        if ($diff > 60)
        {        
            return true;
        }enter code here
        else
        {
            return false;
        }
    }
    function fnheader()
    {
        if(fnlogout("user_time"))
        {
            session_unset();
            session_destroy();
            header("location:index.php?action=expired");
            exit;
        }
    }
    
    是的,Kamal关于代码插入的位置是正确的。一部分作为函数,另一部分在每个文件或公共头函数的头中。

    time()
    存储在
    $time
    变量中。创建名为
    $setTime
    的变量,并设置希望用户超时的时间

    然后检查条件,如果
    $\u会话['setTime']
    为空或未设置,则将超时值存储到会话中,否则当页面刷新时,新值将分配给
    $\u会话['setTime']

    $time = time ();
        $setTime = time () + 60;
        if (empty ( $_SESSION ['setTime'] ) || !isset ( $_SESSION ['setTime'] )) {
            $_SESSION ['setTime'] = $setTime;
        }
    
    然后检查当前时间是否大于存储的时间。如果未设置会话,请同时销毁会话

    if (time () >= ( int ) $_SESSION ['setTime']) {
       session_unset ();
       session_destroy ();
    }
    

    还有提示:在发布问题之前尝试搜索StackOverflow哦,如果我只在
    config.php
    文件中编写此代码,这对整个项目有效吗,因为我的
    config.php
    包含在所有其他项目文件中??如果我在
    session\u start()之前在
    config.php
    文件中编写这3行代码
    它对我的整个项目有效吗?因为
    config.php
    包含在所有其他项目文件中,好的,下面是我的
    config.php
    中的代码,请看它是否有效?
    我在config.php中编写了以下代码用于测试
    ,这意味着会话将在
    1分钟后过期,但我也没有ried这个解决方案——对我也不起作用。只有一个问题kamal,我如何创建一个名为
    user\u time
    的会话,因为我以前只写
    session\u start()
    你需要写$\u session['name'];
    if (time () >= ( int ) $_SESSION ['setTime']) {
       session_unset ();
       session_destroy ();
    }