<table>
<tr>
<td width="30"></td>
<td><img src="Images/logo.jpg" width="100" height="100" />
<td><td><h2> Kunal Structures (India) Pvt. Ltd.</h2></td>
</tr>
</table>
<?php
if(!isset($_SESSION['user_id']))
{
header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");
}
else
{
$now = time(); // checking the time now when home page starts
if($now > $_SESSION['expire'])
{
header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php");
echo "Session Expired !"." <a href='http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php'>"." <h1> ".
"Login again"." </h1>"."</a>";
session_destroy();
}
else
{
$qry = mysql_query("SELECT * FROM user_main WHERE user_id=".$_SESSION['user_id']."");
$loguser=mysql_fetch_assoc($qry);
?>
<table class="headerinfo" align="right">
<tr>
<td>You are <span style="color:#40B3BA;"><?php echo $loguser['user_name']; ?></span>,</td>
<td><a style="color:#f5f5f5; text-decoration:none;" href="logout.php"><b>Logout</b></a></td>
<td> </td>
</tr>
</table>
<br/>
</div>
<?php
if($loguser['user_type'] == "Administrator") //Custom Menubar for Administrator
{
?>
<div class="row-fluid">
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="#"></a>
<ul class="nav">
<li><a href="">Home</a></li>
<li><a href="">Documents</a></li>
</ul>
</div>
</div>
</div>
<?php
}
}
}
为什么它会向我显示已发送的标头错误,并且不会重定向到给定路径。
当会话_ [&#39;到期&#39;]条件变为真时,它应该移动到index.php
文件,但由于标题错误,它不会发生。
我怎么解决这个问题。是否有任何避免标题错误的解决方案。
答案 0 :(得分:6)
因为当您使用php标头函数时,如名称所示,它是标题,必须在任何内容之前发送。
每当您开始发送html时,服务器都会关闭标题部分并开始发送内容。然后,几行之后,你要求他在标题中添加一些东西。这是错误的'标题已经发送',他不能再添加它了。
要解决这个问题,请在编写任何普通html之前移动你的php(即使一个小空间足以触发标题结束。)
和另一个细节,它不会在标题后回显某些内容,因为它永远不会显示。
你可以替换
header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php");
echo "Session Expired !"." <a href='http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php'>"." <h1> ".
"Login again"." </h1>"."</a>";
session_destroy();
与
session_destroy();
header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php");
答案 1 :(得分:1)
在进行任何输出之前,您必须使用php标头功能。所以你必须重组一些代码
<?php
session_start();
if(!isset($_SESSION['user_id'])){
header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");
}
else{
$now = time(); // checking the time now when home page starts
if($now > $_SESSION['expire']) {
session_destroy();
header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php");
}
}
?>
<html>
<!-- put html code here... ->
答案 2 :(得分:0)
如果您收到“已发送标头”错误,则可能有三种原因。
如果此错误不是页面上的第一条错误消息,则很可能是之前错误的“雪崩效应”,您可能会忽略它。相反,要专注于修复之前的错误。当您修复第一条错误消息时,“已发送的标头”错误很可能会消失。
这通常可以通过快速自定义php.ini更改来解决:
1)创建一个自定义的php.ini文件(如果还没有)
2)找到如下所示的行:
output_buffering = Off
3)将output_buffering行更改为:
output_buffering = On
这应该是使网站重新上线所需的一切。
参考:http://kb.site5.com/php/how-to-repair-headers-already-sent-php-errors/
您也可以在php文件的顶部添加<?php @ob_start();?>
答案 3 :(得分:0)
我同意Vincent Duprez的观点 但是在javaScript中还有替代方法
这是更新的“daker”代码
<?php
session_start();
if(!isset($_SESSION['user_id'])){
//header("location:http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php");?>
<script>
window.location="http://127.0.0.1/New%20folder/KSIPL1.10/KSIPL/index.php";
</script>
<?php
}
else{
$now = time(); // checking the time now when home page starts
if($now > $_SESSION['expire']) {
//header("location: http://127.0.0.1/KSIPL1.10/KSIPL/index.php");
?>
<script>
window.location="http://127.0.0.1/KSIPL1.10/KSIPL/index.php";
</script>
<?php
session_destroy();
}
}
?>
它会起作用,请运行:)