【问题标题】:How to debug "Warning: session_regenerate_id(): Cannot regenerate session id" in a PHP program?如何在 PHP 程序中调试“警告:session_regenerate_id():无法重新生成会话 ID”?
【发布时间】:2016-12-08 12:22:23
【问题描述】:

我正在制作一个消息传递系统,其中消息 id 是 session_id 并且它位于 session_regenerate id 上。

它工作正常,但是当我更改我的模板时,它不断给出如下错误:

" 警告:session_regenerate_id():无法重新生成会话 ID - 已在 C:\xampp\htdocs\READS 网站中发送的标头 MAIN\Admin\admin-page\admin\message.php 在第 24 行"

下面是我的代码:

<?php
include('header.php');
include('config.php');


if(isset($_POST['submit'])){

$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$id = session_id();
$sender = $_SESSION['id'];

date_default_timezone_set("ASIA/MANILA");
$date = date('m-d-Y h:i a');




$sql = "INSERT INTO `messages`(`session_id`, `sender`, `recipient`,   
`subject`, `content`, `date`, `stat`) 
VALUES ('$id','$sender','$to','$subject','$message','$date','unread')";
mysql_query($sql) or die(mysql_error());
session_regenerate_id();
if($sql){

echo "<script>alert('Message Sent')</script>";

}else {
echo "<script>alert('error')</script>";
}

}

?>
<div>
<ul class="breadcrumb">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">User</a>
</li>
</ul>
</div>

<div class="box-content">


<form action='' method='POST'>

To: <select name='to' class="form-control" id="inputEmail3">

<?php $sql = "SELECT * FROM users ";
$result=mysql_query($sql); 
while ($row = mysql_fetch_array($result)){
echo "<option value='".$row['id']."'>".$row['Fname']."      
".$row['Lname']." (".$row['user_type'].")</option>";

}

?>
</select>


<div class='col-md-2 col-sm-2 col-xs-5' style='margin-left:150px;    
margin-top:-10px; width:500px;'>

<br>
Subject: <input type='textfield' name='subject' class="form-control"        
id="inputEmail3"><br><br>
Message: <textarea name='message'  class="form-control" id="inputEmail3"             
cols='30' rows='8'></textarea>
<div style = 'margin-left:420px; margin-top: 10px;'>
<input type='submit' name='submit'  value='Send'></div>
</td>




</body>
</html>
<?php include('footer.php');
?>

【问题讨论】:

  • 您的 INSERT 查询存在 SQL 注入漏洞,这意味着用户可以输入您通常不允许进入的数据库值。

标签: php mysql


【解决方案1】:

确保在发送任何内容之前设置会话或 cookie。 会话和 cookie 设置在响应的标头中,由于在发送内容(正文)后您无法更改标头,因此您将面临此警告。

在更彻底地阅读了你的代码之后,我必须提醒你,这段代码不应该放到现实世界中,因为你没有逃避任何查询。另外,您应该真正切换到 MySQLi 或 PDO,因为 mysql_* 函数自一些 PHP 版本以来已被弃用。

【讨论】:

  • 谢谢先生!但是你觉得我应该怎么做?
  • 您应该在调用会话函数之前检查是否有任何内容(包括错误/警告/前导空格键)。如果您认为没有内容,请再看一遍,因为服务器总是正确的;)
  • 我已经在任何地方寻找了一百万次,但我仍然无法修复它 T.T
  • 请粘贴C:\xampp\htdocs\READS Website MAIN\Admin\admin-page\admin\message.php,因为错误提示第40行有东西。没有完整源,我们无能为力
  • 我给的代码是message.php。并且错误发生在我放置 session_regenerate_id(); 的行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 2021-11-08
  • 2015-04-03
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多