【问题标题】:is confirmation needed causing undefined session variables being displayed?是否需要确认导致显示未定义的会话变量?
【发布时间】:2013-01-10 18:21:13
【问题描述】:

我在下面有一个代码,用于检查教师是否登录。通过会话检查教师登录状态的 $_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 消息。但我遇到的问题是,当 Sessions 已过期,它开始在此页面上显示未定义的$_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 脚本在 session 用完时没有这个问题。

以下是注销确认代码:

$(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

【问题讨论】:

  • 与 jquery 无关,所以我删除了那个标签。

标签: php


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2023-03-14
    • 2018-05-29
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多