首页 > 解决方案 > 为什么会话、服务器或浏览器让我无法登录?

问题描述

我已经使用我的“登录脚本”一段时间了,完全没有问题。
但直到最近我一直被注销。有时我可以在一小时内登录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"); 
}

编辑
应该session_start();在所有页面上运行?
我以前也有过,但不知什么if(!isset($_SESSION....原因改成...

标签: php

解决方案


根据PHP 文档

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

要恢复会话,您需要start_session()在每个请求上调用。

不需要

if (!isset($_SESSION)... 

推荐阅读