Php 会话不被维护

Php 会话不被维护,php,Php,我有一个简单的身份验证:您登录login.php页面,然后重定向到home.php页面 这是login.php的代码: if(pg_num_rows($rs) == 0){ //I search in db for a row with username and password $errMess = "error"; pg_close($conn); }else{ $row = pg_fetch_row($rs); se

我有一个简单的身份验证:您登录login.php页面,然后重定向到home.php页面

这是login.php的代码:

if(pg_num_rows($rs) == 0){ //I search in db for a row with username and password
        $errMess = "error";
        pg_close($conn); 
    }else{
        $row = pg_fetch_row($rs);
        session_start(); 
        $_SESSION['username']=$_POST["nick"];
        $_SESSION['admin'] = $row[0];
        pg_close($conn); 
        header("Location: /home.php");
    }
现在在家里,我用这种方式完成了标题:

<?php require_once("scripts/functions.php"); 
      require_once("scripts/config.php");
      session_start(); 
?>
 <div id="siteHeader" class="headersLeft"><?php echo WELCOME;?></div>
        <div id="userContainer" class="headersRight"> 

            Logged as: <?php echo getDisplayName(); ?>
            <?php if(isset($_SESSION['username'])) {?>
                <button class="button" onclick="location.href='/logout.php';">logout</button>
            <?php }else{ ?>
                <button class="button" onclick="location.href='/login.php';">login</button>
            <?php }
            ?>
        </div>

记录为:
注销
登录
它不起作用:即使数据正确,它仍然给我“guest”,会话变量在标题段中丢失了..为什么?

Write session_start();最重要的是(紧接着

或者,如果仍然无法工作,则按如下方式编写代码:

<?php 
ob_start();
session_start(); 
require_once("scripts/functions.php"); 
require_once("scripts/config.php");
?>

另外,不要忘记将这两行放在login.php页面的顶部。 希望有帮助:)

写会话_start();最重要的是(紧接着

或者,如果仍然无法工作,则按如下方式编写代码:

<?php 
ob_start();
session_start(); 
require_once("scripts/functions.php"); 
require_once("scripts/config.php");
?>

另外,不要忘记将这两行放在login.php页面的顶部。
希望它能有所帮助:)

我猜在继续操纵会话的
$的
if
语句之后还有一些代码。这就是
$\u会话['username']
被分配
'guest'
值的地方

记住,
标题(“Location:/home.php”)仅设置响应标题。它不会立即重定向,停止脚本执行

放置
退出按钮header()后面紧跟code>命令,以防止执行到达代码的其余部分:

    header("Location: /home.php");
    exit;

我猜在继续操作会话
$的
if
语句之后还有一些代码。这就是
$\u会话['username']
被分配
'guest'
值的地方

记住,
标题(“Location:/home.php”)仅设置响应标题。它不会立即重定向,停止脚本执行

放置
退出按钮header()后面紧跟code>命令,以防止执行到达代码的其余部分:

    header("Location: /home.php");
    exit;

已解决:我在windows下,php实际保存会话文件的临时文件夹的默认路径错误:为“/tmp”,无法识别。
我将它设置为“C:\php\tmp”,它成功了:会话文件根本没有保存

已解决:我在windows下,php实际保存会话文件的临时文件夹的默认路径错误:为“/tmp”,无法识别。 我将它设置为“C:\php\tmp”,它成功了:会话文件根本没有保存

这对我很有用:

session_save_path ( "" ) ;  
session_start();
这对我很有用:

session_save_path ( "" ) ;  
session_start();

您在会话中存储了多少数据?如果超过了限制,那就是你的问题。在你的代码中设置断点,试着了解哪部分出错了。一个好的开始是看看什么
var_dump(pg_num_rows($rs)==0)输出。在
session\u start()
之前是否有任何输出?身份验证很好:它会将我带到home.php页面,因此num\u rows会给出正确的输出。我认为这与会话有关。如果将
session\u start()
放在每个文件的开头,会发生什么?会话中存储了多少数据?如果超过了限制,那就是你的问题。在你的代码中设置断点,试着了解哪部分出错了。一个好的开始是看看什么
var_dump(pg_num_rows($rs)==0)输出。在
session\u start()
之前是否有任何输出?身份验证很好:它将我带到home.php页面,因此num\u rows提供正确的输出。我认为这与会话有关。如果放置
session\u start(),会发生什么
在每个文件的开头?请注意:如果将文件保存为带有BOM标记的UTF-8,即使是第二个文件也会失败。如果这就是问题所在,如果显示错误,OP应该会收到“headers ready sent”(标题已发送)错误。请注意:如果将文件保存为带有BOM标记的UTF-8,即使第二个也会失败。如果这是问题所在,如果显示错误,OP应该会收到“headers ready sent”错误。如果您解释了如何更改它,那就太好了:)如果您解释了如何更改它,那就太好了:)