为啥页面重定向在 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 开发者工具中看到重定向调用,但实际上并没有重定向
请帮助我理解我在代码中的错误。
【问题讨论】:
在您打开<?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】:
确保<?php
之前没有空格,因为这会阻止您设置任何标题属性。
【讨论】:
【参考方案2】:明确地做unset($_SESSION['userid']);
就足够了。
session_destroy() 状态的页面
session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要再次使用会话变量,必须调用 session_start()。
为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此。
【讨论】:
以上是关于为啥页面重定向在 php 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
PHP Header Location 在 localhost xampp 中不起作用?
JavaScript 重定向在 Facebook 应用内浏览器中不起作用