注意:未定义的索引:会话变量是否可以忽略?

问题描述 投票:0回答:1

背景故事

我曾经将自己的网站托管在GoDaddy专用服务器上。通常,我会(在用户成功登录后)将某些内容应用于_SESSION变量,以确定用户已成功登录,例如

if ($_SESSION['user_logged_in'] == true) {
    // did stuff here
}

我通常会在页面顶部应用这样的内容,以防万一用户未登录,则会将其重定向到其他地方,例如...

<?php
if ($_SESSION['user_logged_in'] != true) {
    // direct them to log in
    header("Location: http://www.example.com/login");
    die();
} else {
    // user is logged in so show them stuff
}
?>

我从GoDaddy迁移到AWS,并使用Apache等构建了自己的EC2实例。现在,当我在用户未登录的情况下访问页面时,出现了类似

的错误
Notice: Undefined index: user_logged_in in /var/www/html/index.php on line X

由于用户未登录并且尚未创建会话变量,因此从技术上讲,我理解为什么收到此消息。

但是....

我的第一个问题是,apache中是否存在忽略会话变量是否设置为不显示错误的设置?当我与GoDaddy在一起时,我从未收到此消息,所以我假设是这样。

第二,不使用if (isset($_SESSION['variable'])之类的东西来确定会话变量是否存在会带来哪些安全风险?

不会使用类似if ($_SESSION['user_logged_in'] != true) {的东西吗?

php arrays variables warnings undefined-index
1个回答
0
投票

您可以使用error_reporting关闭error_reporting级别错误:

Notice

但是从长远来看,最好使用Null Coalescing运算符error_reporting(error_reporting() & ~E_NOTICE); 之类的代码来修复代码>

??
© www.soinside.com 2019 - 2024. All rights reserved.