我添加了一些代码,以尝试防止用户自动注销(会话)。 -但很长一段时间后仍会记录用户
我想要的是用户登录后能够访问多个页面,而如果它们处于空闲状态则不注销它们,因此为什么我要花大量的空闲时间-换句话说,请保持登录状态直到他们决定单击注销。
登录页面
$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(); }
?>
答案 0 :(得分:0)
有几种处理方法:
您可以更改服务器本身上会话的生命周期,或者如果无法访问服务器设置,则可以尝试通过代码覆盖它:
ini_set('session.gc_maxlifetime', 6000000);
如果您无法更改服务器上会话的寿命,则可以使用此小代码“技巧”,请记住,如果客户端计算机关闭或进入睡眠模式,则会话也将过期: / p>
基本上,您创建一个包含以下内容的php脚本:
session_start();
第二,您只需使用以下代码编写一些jquery:
$(document).ready(function() {
// keep alive
setTimeout(keepalive(),120000);
});
function keepalive() {
$.get( "url/to/ajax.php", function( data ) { setTimeout(callserver,12000); });
}
答案 1 :(得分:0)
您可以使用技巧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
文件放在顶部,或将包含此代码的文件包含在项目中。
希望获得帮助。