php中的会话超时无法正常工作,想知道我的错误是什么吗?

php中的会话超时无法正常工作,想知道我的错误是什么吗?,php,session,timeout,echo,Php,Session,Timeout,Echo,我正在使用PHP解决会话超时问题……我找到了一些解决方案,因此我选择了我最了解的解决方案,即: $now = time(); // checking the time now when home page starts if($now > $_SESSION['expire']) { session_destroy(); echo "Your session has expire ! <a href='login.php'>Login

我正在使用PHP解决会话超时问题……我找到了一些解决方案,因此我选择了我最了解的解决方案,即:

    $now = time(); // checking the time now when home page starts

    if($now > $_SESSION['expire'])
    {
    session_destroy();
    echo "Your session has expire ! <a href='login.php'>Login Here</a>";
    };

结果是消息
您的会话已过期
确实出现了,但是页面仍然在主页中,而不是返回登录页面……我想知道是否通过添加
标题('Location:login.php')会将其带回登录页面

如何将echo消息改为弹出消息,并将页面返回到login.php


谢谢…我知道网上有答案,但我想知道我的错误在哪里,这样我可以在这里学到一些东西…非常感谢您的教学和指导

您不能重复某些内容,同时通过header()调用重定向到主页。标头调用要求您不回显任何内容。此外,弹出窗口需要使用某种客户端脚本(ECMAScript/JavaScript)。尝试在注销时输出此代码,而不是您的消息:

<script>
alert('Your session have expired! Please login again.');
location.href = 'login.php';
</script>
login.php

if(isset($_SESSION['error'])) {
  printf('<p class="error">%s</p>', $_SESSION['error']);
  unset($_SESSION['error']);
}
if(isset($\u会话['error'])){
printf(“

%s

”,$\u会话['error']); 取消设置($_会话['error']); }
要显示通知并重定向到login.php吗?这有点棘手。如果您使用header函数,则重定向将立即生效。因此,用户看不到您的回显文本。您可以在延迟x秒后使用JavaScript重定向,以便用户有时间读取通知,然后重定向到login.php。如果您这样做,那么最好在回显通知(和JavaScript)后退出脚本,这样页面的其余部分就不会被渲染。否则这可能会导致混淆。这是一个很好的答案,很好地解释了正确的方法……但您可以在设置重定向调用
标题(“刷新:0;url=login.php”)后回显内容;)劳伦斯,这个信息不会被看到。仅仅因为你在技术上可以回显内容并不意味着这是正确的做法(因为它不会被用户看到)。非常感谢你设法用你的答案解决问题..谢谢!
function my_session_destroy() {
  $_SESSION = array();
}

if (/* session expired  ...*/) {
  my_session_destroy();
  $_SESSION['error'] = 'Your session have expired. Please login and try again.';
  header('Location: login.php');
  exit(); //Always call exit() after a header('Location: ...') call!
}
if(isset($_SESSION['error'])) {
  printf('<p class="error">%s</p>', $_SESSION['error']);
  unset($_SESSION['error']);
}