PHP会话开始不起作用

时间:2012-03-14 23:52:31

标签: php html

未登录时,您可以在浏览器中输入此页面的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>

5 个答案:

答案 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>

除非您知道它们存在,否则不应引用数组索引。