Php 函数会话_已注册(),无法修改头信息-头已由发送
我正在尝试创建一个包含会话的管理页面。我从admin.php中得到以下两个错误Php 函数会话_已注册(),无法修改头信息-头已由发送,php,Php,我正在尝试创建一个包含会话的管理页面。我从admin.php中得到以下两个错误 Deprecated: Function session_is_registered() is deprecated in /home/content/95/10216895/html/test/admin.php on line 4 Warning: Cannot modify header information - headers already sent by (output started at /hom
Deprecated: Function session_is_registered() is deprecated in /home/content/95/10216895/html/test/admin.php on line 4
Warning: Cannot modify header information - headers already sent by (output started at /home/content/95/10216895/html/test/admin.php:4) in /home/content/95/10216895/html/test/admin.php on line 7
代码如下所示:
<?php
//Start the session
session_start();
//Get the user name from the previously registered super global variable
define(ADMIN, $_SESSION['name']);
if (!session_is_registered("admin"))
{
//If session not registered, redirect to login.php page
header("location:login.php");
}
else
{
header( 'Content-Type: text/html; charset=utf-8' );
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
用于设置变量的另一个文件check_login.php中的登录检查代码如下:
$sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
//echo '<p>'.$sql.'</p>';
$result=mysqli_query($dbC, $sql);
//echo '<p>'.$result.'</p>';
// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if ($count==1)
{
// Register $myusername, $mypassword and redirect to file "admin.php"
session_start();
$_SESSION['name'] = 'admin';
$_SESSION['password'] = 'password';
// session_register("admin");
// session_register("password");
// $_myusername= $myusername;
$_SESSION['name']= $myusername;
header("location:admin.php");
}
$sql=“从login\u admin中选择*,其中user\u name='$myusername'和user\u pass=SHA1('$mypassword')”;
//回显“”.$sql.”;
$result=mysqli_查询($dbC,$sql);
//回显“”.$result.“”;
//Mysql\u num\u行是计数表行
$count=mysqli\u num\u行($result);
//若结果匹配$myusername和$mypassword,则表行必须为1行
如果($count==1)
{
//注册$myusername、$mypassword并重定向到文件“admin.php”
会话_start();
$\会话['name']='admin';
$\会话['password']='password';
//会话注册(“管理”);
//会话注册(“密码”);
//$\u myusername=$myusername;
$\会话['name']=$myusername;
标题(“位置:admin.php”);
}
有人能帮我解决这个问题吗?在最近的编辑之后,您不应该使用弃用的函数,而应该使用
isset()代码>
当在会话\u开始调用之前遇到一些输出时,就会出现这种情况
一种解决方案是将ob_start()代码>就在会话_start()之前代码>首先,您有一个输入错误:
define(ADMIN,$_SESSION['name']);
应该是:
define('ADMIN',$_SESSION['name']);
第二:
问题的原因是,您实际上正在使用以下命令向浏览器输出某些内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
而不是:
session_is_registered('admin')
这是由于您收到的错误导致的问题。当您收到错误时,将发送输出。因此,请修复错误,因为它只是一个通知,如果您将错误报告给0,则此操作将有效
参考:
如果(!session\u已注册(“admin”))
更改为如果(!isset($\u session[“admin”])
那么,关于session\u已注册(“admin”)
被弃用的警告是因为,毫不奇怪,该函数已弃用(实际上,已从PHP5.4+中删除)。您应该使用isset($\u SESSION[“admin”])
检查变量是否存在
第二个原因是,不知何故,在发送头之前,输出会滑出。在给出头调用之前,您的代码似乎没有发送任何内容,但在之前可能只有一个空格字符。虽然两张海报上的内容都是正确的,但生成的输出实际上是使用会话时出现的E_不推荐的错误
一旦你把它改成其他的建议,你就不会有问题了
此外,您绝对应该在头重定向之后立即放置一个“退出”。现在,PHP将执行整个页面,即使在您尝试重定向未授权用户后请使用isset函数验证是否设置了会话头已发送错误是因为警告被视为空白,因此未执行头函数您是否在日志或页面上收到这些错误?如果是后者,则需要将display\u errors
更改为off。error告诉答案session\u已注册()。并将exit()
放在标题重定向之后。请您解释一下-1Sure:“这是由于您收到的错误导致的问题。”就像说“您有一个错误”,这是显而易见的。“当你收到错误输出时,它就会被发送。”是的,错误就是这么说的,这有什么帮助呢?。“修正错误”,是的,冠军,我们该怎么做?“因为这只是一个通知,如果您将错误报告到0,这将起作用。”您是否认真地建议使用错误报告抑制每个错误是一个好主意?(即使只压制通知也是个坏主意)。我应该添加更多吗?我编辑了答案,然后添加了如何修复该问题的代码。(E_警告)错误是因为存在(E_已弃用)错误,因此如果您修复(E_已弃用),它将自动修复(E_警告),请阅读问题,并使用指定的行号检查错误消息。您是对的,但我对你的答案的第一个版本投了票,现在我的投票被锁定,直到你编辑它。所以,如果你编辑你的答案,我将撤消我的投票。你不觉得不提供理由就投票否决有点奇怪吗?这是给投票否决它的人的。谢谢你,它现在运行良好
session_is_registered('admin')