【问题标题】:stop session from logging user out停止会话注销用户
【发布时间】:2019-03-13 14:17:24
【问题描述】:

我添加了一些代码来尝试阻止用户自动注销(会话)。 - 但它仍然会在这么长时间后记录用户

我想要的是让用户在登录时能够访问多个页面,并且在他们空闲时不会将它们注销,因此我放置了很长的空闲时间 - 或者换句话说,保持登录状态直到他们决定单击注销。

登录页面

$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(); }
?>

【问题讨论】:

  • 让用户保持登录状态的“技巧”是进行 ajax 调用,每隔 x 分钟触发一次 ajax 调用,然后在 ajax 调用中执行 session_start();这将使用户保持登录状态,除非计算机决定关闭或进入睡眠模式
  • @Naruto - 感谢您的建议,是否有一些链接可以让我看到如何做到这一点,我从未使用过 Ajax
  • 给我几分钟,我会在这里发布一个例子
  • 添加ini_set('session.gc_maxlifetime', 6000000); 覆盖默认会话时间

标签: php


【解决方案1】:

有几种处理方法:

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

ini_set('session.gc_maxlifetime', 6000000);

session.gc_maxlifetime manual

如果您无法更改服务器上会话的生命周期,您可以使用这个小代码“技巧”,请记住,如果客户端电脑关闭或进入睡眠模式,会话也会过期:

基本上你会创建一个 php 脚本,其中包含:

session_start();

其次,您只需使用以下代码编写一些 jquery:

$(document).ready(function() {
    // keep alive
    setTimeout(keepalive(),120000);

});

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

【讨论】:

    【解决方案2】:

    你可以使用一个技巧,http://php.net/manual/en/function.session-start.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 文件放在顶部或在您的项目中包含包含此代码的文件。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 2023-03-27
      • 2010-11-21
      • 2019-07-09
      • 2012-05-11
      • 2019-10-11
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多