为啥页面重定向在 php 中不起作用

Posted

技术标签:

【中文标题】为啥页面重定向在 php 中不起作用【英文标题】:Why Page redirection not working in php为什么页面重定向在 php 中不起作用 【发布时间】:2014-11-27 15:37:19 【问题描述】:

我不明白为什么下面的代码没有重定向,我已经破坏了会话,所以条件应该是真的,但它没有重定向到这个页面,

<?php
    session_start();

    if(!isset($_SESSION['userid']))    
        header('Location: Login.html');
        exit;
    
?>

但在注销 php 中,重定向运行良好。

<?php
    session_start();
    session_destroy();
    header('Location: Login.html');
    exit;
?>

编辑

我可以在 Chrome 开发者工具中看到重定向调用,但实际上并没有重定向

请帮助我理解我在代码中的错误。

【问题讨论】:

在您打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部,看看它是否会产生任何结果。 isset 不检查该值是否为真。它检查密钥是否存在......所以如果$_SESSION['userid'] 存在但为假,它不会重定向。你应该改用empty ***.com/questions/18539403/…, code.google.com/p/chromium/issues/detail?id=103458, serverfault.com/questions/363275/chrome-caching-302-redirects @Cfreak,我相信 isset 就足够了。他正试图完全删除它。如果它被删除,isset() 将返回 false。他不在乎当前的值是多少 @MikeB,所有这些都表示 JS(因为 CORS)。这是在 PHP 中。意思是它的服务器端。独立于浏览器。服务器在将任何内容发送到浏览器之前进行重定向 【参考方案1】:

确保&lt;?php 之前没有空格,因为这会阻止您设置任何标题属性。

【讨论】:

【参考方案2】:

明确地做unset($_SESSION['userid']); 就足够了。

session_destroy() 状态的页面

session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要再次使用会话变量,必须调用 session_start()。

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此。

【讨论】:

以上是关于为啥页面重定向在 php 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP Header Location 在 localhost xampp 中不起作用?

为啥方法重命名在 PHP 特征中不起作用?

为啥我的 .htaccess 301 重定向规则不起作用?

JavaScript 重定向在 Facebook 应用内浏览器中不起作用

为啥 FBLogin 在模拟器中不起作用? - 它留在 Safari 中?

PHP重定向不起作用