代码之家  ›  专栏  ›  技术社区  ›  Cesar Bielich

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

  •  0
  • Cesar Bielich  · 技术社区  · 4 年前

    背景故事

    我过去常常在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) { 是同一件事吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Nick    4 年前

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

    error_reporting(error_reporting() & ~E_NOTICE);
    

    但从长远来看,最好使用类似于Null凝聚运算符的东西来修复代码 ?? 例如

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