未登录时,您可以在浏览器中输入此页面的URL,但仍会显示该表单。如果没有登录,我不希望HTML显示 - 只是说必须登录的消息。我在其他页面上使用相同的会话代码并且它有效 - 但是确实给出了'未定义索引'的通知,这是一个有点恼火。有什么想法吗?
<?php
session_start();
if ($_SESSION['first_name']&& $_SESSION['username'])
echo "Welcome ".$_SESSION['first_name']."<br><a href='login/logged_out.php'>log
out</a>";
else
die("You must be logged in. Click <a href='login/login_page.php'>here</a> to log
in.");
?>
<html>
<head>
</head>
<body>
<form id="1" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="5" />
<form id="2" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="6" />
<form id="3" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="7" />
<form id="4" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="8" />
<form id="5" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="9" />
<form id="6" class="rounded" action="test4.php" method="post"/>
<input type="submit" name="submit" class="button" value="10" />
</form>
</body>
</html>
答案 0 :(得分:2)
试试这个:
<?php
session_start();
if(isset($_SESSION['first_name']) && isset($_SESSION['username']) && $_SESSION['firstname']!= ''){
echo "Welcome ".$_SESSION['first_name']."<br><a href='login/logged_out.php'>logout</a>";
}else{
die("You must be logged in. Click <a href='login/login_page.php'>here</a> to log in.");
}
?>
答案 1 :(得分:1)
它不认为first_name和/或用户名是会话中的索引
检查是否设置了first_name和/或用户名
isset($_SESSION['first_name'])
isset($_SESSION['username'])
此外,您可能不希望基于这些值验证布尔条件,除非它们本身是布尔值(尽管first_name不像布尔值那样读取)。
答案 2 :(得分:0)
我不确定“未开始”的问题是什么。通过isset
检查可以防止未定义的索引。您的代码也可以通过使用说明变量名称和带括号的括号来改进if / else部分:
session_start();
$isLoggedIn = isset($_SESSION['first_name']) && isset($_SESSION['username']);
if ($isLoggedIn)
{
echo "Welcome ", htmlspecialchars($_SESSION['first_name']),
"<br><a href='login/logged_out.php'>log out</a>";
}
else
{
echo "You must be logged in. Click <a href='login/login_page.php'>here</a> to log in.";
return;
}
此变体还使用return
而不是die
来将程序流程返回给更高的实例。
答案 3 :(得分:0)
使用会话时,您可以添加某个地方
print_r($_SESSION);
查看您是否已设置/取消设置该会话。
答案 4 :(得分:-1)
您的代码编写得很糟糕。我会修改为:
<?php
session_start();
if (empty($_SESSION['first_name']) || empty($_SESSION['username'])) {
die("You must be logged in. Click <a href='login/login_page.php'>here</a> to log in.");
}
echo "Welcome " . $_SESSION['first_name'];
?>
<br><a href='login/logged_out.php'>logout</a>
除非您知道它们存在,否则不应引用数组索引。