Php 我能';t echo会话用户名,我是否正确存储了会话用户名和id?

Php 我能';t echo会话用户名,我是否正确存储了会话用户名和id?,php,mysql,session,Php,Mysql,Session,我正在设置一个登录表单 预期结果: 成功登录后回显页面上的会话用户名 实际结果: 登录成功。会话用户名不回显。似乎会话用户名不存在或未持续到下一页 下面的代码有问题吗 LOGIN.PHP ... session_start(); if (mysql_num_rows($result) ==1) { session_regenerate_id(); $row = mysql_fetch_assoc($result); $profileid = $ro

我正在设置一个登录表单

预期结果:

成功登录后回显页面上的会话用户名

实际结果:

登录成功。会话用户名不回显。似乎会话用户名不存在或未持续到下一页

下面的代码有问题吗

LOGIN.PHP

...
session_start();    
    if (mysql_num_rows($result) ==1)
    {
    session_regenerate_id();
    $row = mysql_fetch_assoc($result);
    $profileid = $row['userid'];
    $profile = $row['username'];
    //Set session
    $_SESSION['profileid'] = $profileid;
    //Put name in session
    $_SESSION['profile'] = $profile;
    //Close session writing
    session_write_close();

    //Redirect to user's page
    header("location: index.php?msg=userpage");
    exit();
    }
...
...
    <?php
    session_start();    
    if($_GET['msg']=="userpage")
    {
    echo $_SESSION['profile'];

    } 
...
INDEX.PHP

...
session_start();    
    if (mysql_num_rows($result) ==1)
    {
    session_regenerate_id();
    $row = mysql_fetch_assoc($result);
    $profileid = $row['userid'];
    $profile = $row['username'];
    //Set session
    $_SESSION['profileid'] = $profileid;
    //Put name in session
    $_SESSION['profile'] = $profile;
    //Close session writing
    session_write_close();

    //Redirect to user's page
    header("location: index.php?msg=userpage");
    exit();
    }
...
...
    <?php
    session_start();    
    if($_GET['msg']=="userpage")
    {
    echo $_SESSION['profile'];

    } 
...
。。。

您不需要打开/关闭会话,这不值得额外的代码行。我也不知道你为什么要重新生成会话ID


但是,有一件事是你的HTML文件构造得很糟糕,而且它看起来几乎像会话_start()不在任何PHP标记内,因此它甚至没有被当作代码处理。

首先,你的HTML仍然是PHP,因为它只涉及PHP标记

while
替换为
if
因为您只想设置$\u会话变量一次

最后一部分,你要找的是这个

<?php
session_start();   //at the beginning of your script
if($_GET['msg']=="username")
{
 echo $_SESSION['profile'];
}
?>


确保在打开第一个
文件之前消除所有空白,关闭html文件中的if循环

编辑:

我在我的页面上做了这个简单的代码,根据会话概念,代码运行良好…请进行相应的更正

p1.php

<?php
    session_start();    

        //Put name in session
    $_SESSION['profile'] = "Pranav";
    //Close session writing


    //Redirect to user's page
    header("location: p2.php?msg=userpage");
    exit();

?>
<?php 
session_start();    
    if($_GET['msg']=="userpage")
    {
    echo $_SESSION['profile'];

    }

?>

为什么您有一个
while(mysql\u num\u rows($result)==1)
?如果
,为什么不使用
?进行一些调试。只需打印$行,而不是重定向。我感觉像$row['username'];是未定义的。啊,看来你有什么发现。看起来像$row['username'];实际上是未定义的。我认为重新生成会话id是一种很好的做法,如果您有其他人登录,并且您希望使用新用户覆盖它。我应该使用另一个函数吗?我纠正了草率的html。我删除了session\u write\u close,但这似乎没有什么区别。还有其他想法吗?您可以取消设置所有重要的$\u会话内容,以便将某人从会话中“清除”。另外,是否关闭HTML文件中的大括号?关闭大括号。使用unset后,如何启动会话ID?好的。更改为if。对不起,我应该说得更清楚些。html是我的索引页。现在将进行编辑。但是经过所有的更改,结果也没有什么不同。您的标题有一个
位置
,带有小的
l
username
(看起来像一个常量),而不是
$row['username']
。尝试
标题(“位置:index.php?msg=$row['username'])
;位置中的“l”似乎没有什么区别。我发现我的代码很混乱。这里的用户名只是一个标题。将立即将其更改为userpage。此处的标记很松散,但已在本地文件中关闭。很抱歉在这里更正它。