【问题标题】:Error with simple session/cookie "Cannot modify header information"简单会话/cookie 错误“无法修改标头信息”
【发布时间】:2011-07-06 01:12:46
【问题描述】:

我尝试将有效的登录系统从一个域转移到另一个域。它在域 A 上完美运行,但开始出现错误:

警告:无法修改标题 信息 - 已发送的标头 (输出开始于 /home/hootlute/public_html/personal/example/files/admin/config.php:9) 在 /home/hootlute/public_html/personal/example/files/admin/admin_process.php 第 34 行

警告:mysql_free_result():提供 参数不是有效的 MySQL 结果 资源在 /home/hootlute/public_html/personal/example/files/admin/admin_process.php 第 48 行

下面是我来自 admin_process 的代码

<?php
session_start(); 
if ($_POST['adminID']=="") {
    $_SESSION['error']="Please log in with an admin account.";
    header('Location: http://login.example.com/login/admin');
}

include 'config.php';
include 'functions.php';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);

$sql = "SELECT * FROM admin WHERE username='" .$_POST["adminID"]. "' AND password='" .$_POST["password"]. "'";
$result = mysql_query($sql);

if (!$result) {
    die('Invalid query: ' . mysql_error());
}

$num_rows = mysql_num_rows($result);


// CHECKS FOR EXISTING ACCOUNT
if ($num_rows === 0) {
    $_SESSION['error']="Unable to log in. Admin account not found";
    printf("<script>location.href='http://login.example.com.com/login/'</script>");

}
else {
    $admin_rows = mysql_fetch_assoc($result);
    $cookie_info = $admin_rows['admin_id']."$".$admin_rows['name'];
    $expire = time() + 9800;
    setcookie("FS_admin_id",$cookie_info,$expire);
    $sql = "UPDATE admin set login_time = UTC_TIMESTAMP()  WHERE username='" .$_POST["adminID"]. "' AND password='" .$_POST["password"]. "'";
    $logresult = mysql_query($sql);

    if (!$logresult) {
        die('Invalid query: ' . mysql_error());
    }


    /* printf("<script>location.href='admin_home.php'</script>"); */

}

mysql_free_result($result);
mysql_free_result($logresult);
mysql_close($conn);



?>

第 34 行 = setcookie("FS_admin_id",$cookie_info,$expire);

代码有什么问题?是因为PHP版本的不同吗? 当我在代码中间声明 session_start() 时,我也会遇到相同类型的错误......尽管没有打印任何数据。

我一直在寻找setcookie()的问题,但结果都与setcookie()的使用有关。

任何回复将不胜感激:)

【问题讨论】:

  • 我猜测了一下,原因在于您的 config.php 脚本的第 9 行。
  • Lol @ mario... 检查 config.php 中的第 9 行 :) 我敢打赌你有一个尾随空格。
  • 在仔细阅读错误消息时,您会比在此处发布问题更快地解决您的问题。您的脚本也容易受到 SQL 注入的影响。如果您不知道它的含义,请谷歌它。直接显示 SQL 错误并不聪明,应该记录在某处而不是公开显示
  • @Shehi 感谢您的评论,与其他评论不同,它确实很有帮助。我确实有很多尾随空格。不过有趣的事情。为什么同一个文件在域 A 上有效,但在域 B 上无效?是否有我必须在 php 上编辑的设置?
  • 不客气!也许您实际上并没有将文件从一台服务器移动到另一台服务器,而是将您的本地副本上传到新位置? :) 也许你的本地副本因为你的编辑而搞砸了?使用 Dreamweaver? :D 为避免将来出现这种情况,只需从您的 PHP 脚本中删除所有最后的 ?&gt; 行。 PHP 可以没有它们 :)

标签: php session-cookies setcookie


【解决方案1】:

我也在这里回答:D

检查 config.php 中的第 9 行 :) 我敢打赌你那里有一个尾随空格。

编辑: 为避免将来出现这种情况,只需从您的 PHP 脚本中删除所有最后的 ?> 行。 PHP 可以没有它们 :) 并注意 Lekensteyn 对 SQL 注入的建议。

【讨论】:

    【解决方案2】:
    1. 尝试在

    2. 之前找到空格
    3. 尝试找出?>后的空格,将其删除。

    4. 在修改标头的代码之前删除您可以执行的任何回显。

    5. 尝试将 php 文件的文件编码更改为“ANSI”。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-02-28
      • 2021-11-15
      • 2017-10-30
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多