背景故事
我曾经将自己的网站托管在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) {
的东西吗?
您可以使用error_reporting
关闭error_reporting
级别错误:
Notice
但是从长远来看,最好使用Null Coalescing运算符error_reporting(error_reporting() & ~E_NOTICE);
之类的代码来修复代码>
??