PHP - 为什么在调用包含文件时执行函数?

时间:2017-07-24 07:19:03

标签: php session

我试图进行不活动注销,因此我有一个PHP文件,其中定义了logout()。 然后我有一个片段用于检查会话打开的时间并保持在同一页面中。 但是当我执行include_once "logout.php"include "logout.php"我的logout()函数被称为程序性并且不想要这种行为。如何创建功能,将其包含在其他文件中并且不执行?

logout.php:

<?php

  include_once "con.php";
  /*$executeLog = false;
  if(isset($_GET['logout'])){
    $executeLog=true;
  }

  if($executeLog){
    logout();
  }
    */
  function logout(){
    session_start(); 
    global $con; 
    //0-> entrada
    //1-> salida
    $q = mysqli_query($con,"INSERT INTO logs (usuario,fecha_hora,entrada_o_salida) VALUES (".$_SESSION['user_id'].",CURRENT_TIMESTAMP(),1)");
    //echo ($q) ? 'yes' : 'error :'.var_dump($q); 
    //exit();
    // Elimina la variable email en sesión.
    unset($_SESSION['email']);
    unset($_SESSION['user_id']);
    unset($_SESSION['nombre_apellidos']);
    // Elimina la sesion.
    session_destroy();
    $executeLog = false;
    // Redirecciona a la página de login.
    header("HTTP/1.1 302 Moved Temporarily");
    header("Location: index.php");
  }

?> 

片段:

<?php
session_start();
include_once "con.php";
include "logout.php";

$_SESSION['loginTime'] = time();

if($_SESSION['loginTime'] < time()+MAX_SESSION_TIME*60){ logout(); } 

(...)
?>
编辑:该死的,条件错了。遗憾。

1 个答案:

答案 0 :(得分:4)

if正在检查他们登录的时间是否小于time()+MAX_SESSION_TIME*60,这将永远为真。

只需检查相反的情况即可解决问题:

<?php
session_start();
include_once "con.php";
include "logout.php";

$_SESSION['loginTime'] = time();

if($_SESSION['loginTime'] > (time()+MAX_SESSION_TIME*60)){ logout(); } 

(...)
?>