是否需要确认,从而显示未定义的会话变量


is confirmation needed causing undefined session variables being displayed?

我在下面有一个代码,它检查一个老师是否登录了。$_SESSION变量用于通过会话检查教师的登录状态member.php脚本。

<?php
session_start();
include('member.php');
include('teachername.php');
...
if ((isset($username)) && (isset($userid))){ 

...
}else{ 
echo "Please Login to Access this Page | <a href='./teacherlogin.php'>Login</a>";
}
?>

Now如果会话已经过期,那么它会显示正确的Please Login to Access this Page消息。但我的问题是,当塞申斯已经过期,它开始在此页面上显示未定义的$_SESSION变量通知,因为我在此页面上有会话。

但是它不会在会话过期后的每个页面上显示通知。它只显示用户必须确认退出的页面。你可以在include(teachername.php)代码中看到它显示注销代码,如下所示:

<?php
...
        echo "Logged In: <b>{$_SESSION['teacherforename']} {$_SESSION['teachersurname']}</b> | <a id='teachlogout' href='./teacherlogout.php'>Logout</a>";
        echo "<br/><a id='resetlink' href='./resetpass.php'>Reset Your Password</a>";
        ?>

当用户点击Logout链接时,它执行session_destroy(),如下所示:

<?php
        if ((isset($username)) && (isset($userid))){
        session_destroy();
            echo "You have been Logged Out | <a href='./home.php'>Home</a>";
        }
        else {
            echo "You are Not Logged In";
        }

        ?>

我要问的是,当会话在某些页面中过期时,它是否会破坏会话变量,因为我已经在这些页面中放置了确认用户在注销之前需要确认的页面,因为似乎只有显示未定义会话变量错误的页面才会出现问题在这些页面上,当会话耗尽时,其他PHP脚本没有这个问题。

以下是注销确认代码:

$(function() {   
    function logoutHandler() {
    return confirm("You are currently creating an Assessment, are you sure you want to logout?" + "'n" + "(Your current assessment details will be lost)" + "'n");
}
$('#teachlogout').click(logoutHandler); 

#teachlogout是注销链接的id

在尝试使用会话变量之前,您应该检查会话变量是否已设置。我会把这段代码放在echo语句之外。例如

$firstname = isset($_SESSION['teacherforename'])?$_SESSION['teacherforename']:'';

然后将没有名称的用户视为未登录