PHP会话变量

时间:2011-02-20 22:50:26

标签: php

我一直在网站上工作并拥有以下代码......

<html>
<?php  
    session_start();    
    //if not logged redirect
    if(!$_SESSION['logged']){
        header("location:restricted.php");
    }
    else
    //else continue and display the rest of the page
    {
    //html page content here    
?>

...显然这样做是检查是否设置了会话变量'logged',如果没有,则将用户重定向到restricted.php,否则将显示其余代码(此页面)。 这是在服务器上工作正常,但我刚刚使用另一个主机(显然是服务器),如果没有设置会话,用户只是有一个空白页面(标题为此页面,不受限制.php )。 有人知道为什么会这样吗? 非常非常感谢...

5 个答案:

答案 0 :(得分:5)

在调用session_start()之前,您无法向浏览器输出任何内容 - 它必须在所有输出之前输出,否则将抛出错误 - Headers already sent

正确的方式:

<?php  
    session_start();    
    //if not logged redirect
    if(!$_SESSION['logged']){
        header("location:restricted.php");
    }
    else
    //else continue and display the rest of the page
    {
    //html page content here    
?>
<html>

答案 1 :(得分:0)

但是,它不可能在第一时间起作用! 问题是,在开始会话之前通过在开始会话之前输出“”输出来发送输出。 你应该在所有内容之前设置php-block(这也会使else-branch过时,因为在显示内容之前你会被重定向。 那么代码就是:

<?php
session_start();
if(!$_SESSION['logged']){
    header("location:restricted.php");
}
?>
<html>
<!-- This is only visible if you're logged in! -->

答案 2 :(得分:0)

也许您可以将Session变量与NULL进行比较,可能会更清楚。 不要忘记将session_start();放在页面上的任何其他内容之前。

答案 3 :(得分:0)

由于您的网站未配置为在浏览器中显示错误消息,因此您需要检查PHP的error_log以准确了解错误是什么。

许多共享主机提供了一种查看错误日志的方法,或者至少通过您的主机帐户面板向您显示它们的位置。如果您有ssh访问权限,则可以使用以下命令找到此文件的路径:

$ php -i | grep error_log

或者,您可以使用以下命令在服务器上创建PHP文件:

<?php
    phpinfo();

然后在浏览器中加载该文件并查找error_log配置设置。

通过error_log的路径,如果您拥有ssh访问权限,则可以输入

tail -f /path/to/your/error_log

在上述命令运行时,加载显示空白页面的网页。您的终端将在更新时转储error_log的内容。如果您没有ssh访问权限,则主机可能会提供一种方法来查看PHP为您的站点生成的错误。

只有这样,您才能获得修复导致空白页面的所需信息。

答案 4 :(得分:0)

感谢every1的工作......我知道这听起来有点奇怪,但在旧服务器上它确实在session_start()之前使用了HTML。我是在Dreamweaver上做的,它有所有常见的垃圾Dreamweaver放入: ...如果一个移动这个会议开始下面它是一个空白页面,现在它反过来,它确实让我把它放在下面,工作正常......我知道很奇怪。 再次感谢所有回复:)