Php 为什么会话、服务器或浏览器会阻止我登录?

Php 为什么会话、服务器或浏览器会阻止我登录?,php,Php,我已经使用“登录脚本”一段时间了,一点问题也没有。 但直到最近我一直被注销。有时我可以在一小时内为maby登录。。有时候……就几分钟。我应该更改代码中的某些内容吗。。或者这是apache2/php中的设置 这是我的配置: $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); try { $db = new PDO("mysql:host={$db_host};dbname={$dbname};charset

我已经使用“登录脚本”一段时间了,一点问题也没有。
但直到最近我一直被注销。有时我可以在一小时内为maby登录。。有时候……就几分钟。我应该更改代码中的某些内容吗。。或者这是apache2/php中的设置

这是我的配置:

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
try { $db = new PDO("mysql:host={$db_host};dbname={$dbname};charset=utf8", $db_username, $db_password, $options); } 
catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

//SET HEADER
header('Content-Type: text/html; charset=utf-8'); 

//START SESSION
if(!isset($_SESSION)){ 
    session_start([
        'cookie_lifetime' => 86400,
    ]);
}
//CHECK IF USR IS LOGGED IN
if(empty($_SESSION['usr'])){
    echo "<script>window.location = '/index.php'</script>";
    die("Redirecting to index.php"); 
}
我在每个页面上运行这个配置

这是我检查是否登录的方式

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
try { $db = new PDO("mysql:host={$db_host};dbname={$dbname};charset=utf8", $db_username, $db_password, $options); } 
catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

//SET HEADER
header('Content-Type: text/html; charset=utf-8'); 

//START SESSION
if(!isset($_SESSION)){ 
    session_start([
        'cookie_lifetime' => 86400,
    ]);
}
//CHECK IF USR IS LOGGED IN
if(empty($_SESSION['usr'])){
    echo "<script>window.location = '/index.php'</script>";
    die("Redirecting to index.php"); 
}
//检查USR是否已登录
if(空($\u会话['usr'])){
echo“window.location='/index.php';
die(“重定向到index.php”);
}
编辑
应该
session_start()在所有页面上运行?
我以前有过,但我将其更改为
if(!isset($\u SESSION…
出于某种原因…

根据:

session_start()根据通过GET或POST请求传递或通过cookie传递的会话标识符创建会话或恢复当前会话

要恢复会话,您需要在每次请求时调用
start\u session()

不需要

if (!isset($_SESSION)... 
根据:

session_start()根据通过GET或POST请求传递或通过cookie传递的会话标识符创建会话或恢复当前会话

要恢复会话,您需要在每次请求时调用
start\u session()

不需要

if (!isset($_SESSION)... 

您的脚本没有显示检查过期会话的位置。@EriksKlotins我已经用检查编辑了我的问题!config/session.php的值是多少?在这个文件中,您可以设置会话的过期时间,这将有助于理解导致注销的原因。它应该是这样的:
life=>120
@McBurgerKong你是说我的服务器中有一个文件吗?还是说我什么时候开始会话?如果你读我的配置代码..上面写着:cookie_life=>8640…你可以在我的问题中读到它?!或者这是我的php配置中的一个设置?@BjörnC你需要在每个请求的某个地方调用
session u start
。你的脚本没有显示你在哪里做的您可以检查是否有过期会话。@EriksKlotins我已经用该检查编辑了我的问题!config/session.php的值是多少?在这个文件中,您可以设置会话的过期时间,这将有助于了解导致注销的原因。它应该是这样的:
'life'=>120
@McBurgerKong您的意思是什么我服务器中的一个文件?或者你的意思是当我启动会话时?如果你阅读我的配置代码..它说:cookie_lifetime=>8640…你可以在我的问题中阅读它?!或者这是我的php配置中的一个设置?@BjörnC你需要在每个请求的某个地方调用
session_start
。我明白了..我会尝试注释这行..(删除If)…糟糕的是,我不记得为什么我第一次把它放在那里…从一开始我没有使用它…但是…我肯定有一些错误…或问题…解决了…用if语句…我明白了…我会尝试注释那行…(删除if)…糟糕的是,我不记得为什么我第一次把它放在那里…从一开始我没有使用它…但后来…我肯定有一些错误…或问题…用if语句解决了。。