Php 我能';t echo会话用户名,我是否正确存储了会话用户名和id?
我正在设置一个登录表单 预期结果: 成功登录后回显页面上的会话用户名 实际结果: 登录成功。会话用户名不回显。似乎会话用户名不存在或未持续到下一页 下面的代码有问题吗 LOGIN.PHPPhp 我能';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
...
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。此处的标记很松散,但已在本地文件中关闭。很抱歉在这里更正它。