注意:未定义的索引:在会话变量上可以忽略吗?

Notice: Undefined index: on session variables possible to ignore?

提问人:Cesar Bielich 提问时间:2/10/2020 更新时间:2/10/2020 访问量:794

问:

背景故事

我曾经在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 数组 变量 警告 undefined-index

评论

0赞 yivi 2/20/2020
这回答了你的问题吗?使用 PHP 的 “Notice: Undefined variable”, “Notice: Undefined index” 和 “Notice: Undefined offset”

答:

1赞 Nick 2/10/2020 #1

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

error_reporting(error_reporting() & ~E_NOTICE);

但从长远来看,最好使用 Null Coalescing 运算符之类的东西来修复代码??

if (($_SESSION['user_logged_in'] ?? false) != true) {

评论

0赞 Cesar Bielich 2/10/2020
但是,如果有的话,简单地忽略这些错误是否涉及任何安全风险?
0赞 Nick 2/10/2020
@CesarBielich问题是,如果你比较一个未定义的变量,它不严格等于(例如),它将通过,这可能会导致你的代码认为有人登录了,这将是一个安全问题。只要你不使用这种编程风格,你应该没问题。3v4l.org/FT8SRfalse$_SESSION['user_logged_in'] !== false