停止会话记录用户

  • 本文关键字:用户 记录 会话 php
  • 更新时间 :
  • 英文 :


我有一些代码,可以尝试阻止用户自动登录(会话)。 - 但是它在这么长的时间后仍会记录用户

我想要的是让用户登录时能够访问多个页面,并且如果他们闲置,则不会将它们登录,因此我为什么要放置一个大空闲时间 - 或换句话说,请保持登录直到他们决定点击注销。

登录页

$result = mysqli_query($connection,$query) or die(mysql_error());
    $rows = mysqli_num_rows($result);
        if($rows==1){
        $_SESSION['username'] = $username;
        $_SESSION['username']=time();
            // Redirect user to index.php
        header("Location: admin-index.php");
         }else{
            $_SESSION['incorrect'] = 'Incorrect email or password. Please try again.';
            header ("Location: admin-login.php?=incorrectlogin");
    }
}

登录索引页

<?php 
session_start();
$idletime=6000000;
if (time()-$_SESSION['username']>$idletime){
    session_destroy();
    session_unset();
    header ("Location: admin-login.php");
}else{
    $_SESSION['username']=time();
}
//on session creation
$_SESSION['username']=time();
?>

<!DOCTYPE html>
<html lang="en" >
<head>

第二php页

<?php
session_start();
        if(!isset($_SESSION["username"])){
header("Location: admin-login.php");
exit(); }
?>

有几种处理此问题的方法:

您可以更改服务器本身上的会话的寿命,或者如果无法访问服务器设置,则可以尝试通过代码覆盖它:

ini_set('session.gc_maxlifetime', 6000000);

session.gc_maxlifetime手册

如果您无法更改服务器上的会话的寿命,则可以使用此小型代码"技巧",请注意,如果客户端PC关闭或进入睡眠模式,则会也将过期:

基本上您创建一个包含:

的PHP脚本

session_start();

第二,您只用以下代码编写一些jQuery:

$(document).ready(function() {
    // keep alive
    setTimeout(keepalive(),120000);
});
function keepalive() {
    $.get( "url/to/ajax.php", function( data ) { setTimeout(callserver,12000);  });
}

您可以使用技巧,http://php.net/manual/en/en/function.session-part.php#example-5997

Php version 7.0开始,添加了一个选项,以防止会话到期。86400的时间意味着1天。您可以根据需要进行调整。

if (session_status() == PHP_SESSION_NONE) {
  if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    session_start(['cookie_lifetime' => 86400,]);
  } else {
    session_start();
  }
}

您可以将Php文件的顶部放置或在项目中包含此代码的文件。

希望这个帮助。

最新更新