我一直在使用以下代码开始会话,但在'welcome'之后我无法显示用户名。我怎样才能做到这一点?我使用电子邮件和ID登录。电子邮件,ID和用户名存储在MySQL中。 登录后,登录按钮也会消失,并且应该出现退出按钮。
<div class="hello">
<?php
session_start();
require_once("config.php");
if (!(isset($_SESSION['login']) && $_SESSION['login'] != ''))
{
header ("Location: login.html");
exit;
}
else
{
echo "Welcome </b>, <a href=logout.php>Logout</a> <br><br>";
}
?>
</div>
答案 0 :(得分:1)
header()
和session_start()
必须都出现在任何HTML之前。您可以设置处理登录信息的$_SESSION['username']
和$_SESSION['email']
。
答案 1 :(得分:1)
根据php doc:
要使用基于cookie的会话,必须在向浏览器输出任何内容之前调用session_start()。
因此,在调用session_start()之前,请删除页面中的所有HTML或输出。
在您的情况下,从您的HTML中删除 。
或者您可以在第一行使用ob_start(),这样它甚至可以消耗任何意外输出。在session_start()之前,甚至无法输出新行。如果您使用此方法,请在执行所有会话(标题)相关工作后使用ob_clean()方法。
答案 2 :(得分:1)
不要这样做:
<div class="hello">
<?php
session_start();
require_once("config.php");
这样做:
<?php session_start(); ?>
<div class="hello">
<?php
require_once("config.php");
在将任何输出(包括空格和UTF-8 BOM)发送到浏览器之前,必须调用 session_start()
。因此,必须在任何包含文件中的任何内容输出之前进行调用。这通常没有问题,因为脚本在会话启动时不应该关心。
答案 3 :(得分:0)
你应该考虑像这样创建一个名为get_username_from_email()
的函数,
<?php
function get_username_from_email($email) {
$username = mysql_real_escape_string($email);
return mysql_result(mysql_query("SELECT `username` FROM `YOUR_TABLE` WHERE `email` = '$email'"), 0, 'user_id');
}
?>
在上面的代码YOUR_TABLE
中引用了您的表名,其中包含基本数据。
然后,您可以在现有代码中执行以下操作:
<?php
session_start();
require_once("config.php");
if (!(isset($_SESSION['login']) && $_SESSION['login'] != ''))
{
header ("Location: login.html");
exit;
}
else
{
echo "Welcome". get_username_from_email($_SESSION['login']) ." </b>, <a href=logout.php>Logout</a> <br><br>";
}
&GT;
但是,我对此并不十分肯定。
答案 4 :(得分:0)
假设您有一个用户名和密码字段,而不是在用户提交详细信息时,以及是否正常。然后,在登录后,你必须在会话中保留他的名字(我不推荐它),但你可以这样做
// if use is verified
$_SESSION['logged'] = $username;
现在,在您的会话文件中,您可以显示
echo 'Welcome '.$username.' You, are logged in';