3

我在下面有一个代码,它检查老师是否登录。通过会话检查教师登录状态的 $_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>";

}

?>

现在,如果会话已过期,那么它会显示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

4

1 回答 1

0

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

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

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

于 2013-01-10T18:25:12.400 回答