【问题标题】:How to manage cookies with php如何使用 php 管理 cookie
【发布时间】:2023-04-01 23:52:01
【问题描述】:

我在一个名为 reservation.php 的页面中设置了两个 cookie,我通过 $POST 方法读取两个输入的内容,

if (isset($_POST['chambre']) && isset($_POST['option_chambre'])  )
{
setcookie('preference',$_POST['option_chambre'],time()+3600*24*31,"http://127.0.0.1/partie_3_f/accueil.php",null, false, true);
setcookie('type',$_POST['chambre'],time()+3600*24*31,"http://127.0.0.1/partie_3_f/accueil.php",null, false, true);       
}

然后在其他页面中,我尝试检查数据库并显示结果,其中两个列的值将与 cookie 中存储的值相同

<?php 
{
$con = mysqli_connect('localhost','root','root','pdxhotel');
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$type=$_COOKIE['type'];
$pre = $_COOKIE['preference'];
$soal = $con->query("select * from chambre where vide = 1 and   type_chambre='".$type."' and preference = '".$pre."'");
if (mysqli_num_rows($soal)==0)
{
    echo "pas de chambre disponible";
}
else
{ 
?>
<div id="titres" align="center">
<label >----------------------------</label>
<h2 id="tit"> Resultat de recherche </h2>
<label >----------------------------</label>
</div>
<?php 
for ($i = 0; $i<mysqli_num_rows($soal); $i++)
{
?>
    <div id="offre1" class="offre">
    <img src="Images/chambre3.jpg" width="100%" height="50%" />
    <p  > <?php echo "Chambre de type",$_COOKIE['type'],"and qui vérifie la condition:",$_COOKIE['preference']?> </p>
 </div>
<?php
}
}             
}   
?>

我遇到了问题注意:数组到字符串的转换! 这是我第一次使用 cookie,你能告诉我哪里出了问题,我该怎么办?

【问题讨论】:

  • 该错误发生在哪一行?
  • 您的代码对 SQL 注入开放。请通过bind_param学习使用准备好的查询。
  • @Barmar 问题发生在选择请求中
  • var_dump($type)var_dump($pre) 显示什么?
  • 正如@barmar 所说,不要忘记检查:stackoverflow.com/questions/601300/what-is-sql-injection

标签: php mysql database cookies


【解决方案1】:

$_SERVER['HTTP_COOKIE']的内容是这个问题的关键:

"PHPSESSID=vmejgnbc0ptq893eo7fei9sgc7; preference[$id]=1; type[$id]=a; preference=1; type=a"
  • PHPSESSID:这是你的 php 会话 ID,这很好

  • 偏好=1; type=a:这些是您的代码在 OP 中设置的 cookie,因为它们的键是用纯文本设置的。

  • 偏好[$id]=1; type[$id]=a:这些键会导致问题。首先,这些似乎是偏好和类型的重复,更大的问题是它们的名称中有一个 [$id]。当 php 将 cookie 字符串解析为 $_COOKIE 数组时,这些值将被解释为以 $i 作为键的数组本身。当您尝试读取首选项并将键作为字符串键入以将其值插入 sql 查询字符串时,您会收到“注意:数组到字符串的转换”消息。

由于我们无法调试您的代码,我们无法确定这些重复和不正确的密钥来自何处。我的第一个猜测是这些 cookie 是早期测试的残余。尝试在用于测试的浏览器中删除它们。如果它们再次出现,那么您需要调试您的代码并确定您在哪里设置了额外的 cookie。

我的另一个建议是检查您是否可以使用会话或获取 url 中的参数而不是 cookie 来传递这些变量。

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2012-02-22
    • 1970-01-01
    • 2015-02-17
    • 2011-03-02
    • 2017-02-20
    • 1970-01-01
    • 2020-11-03
    • 2015-06-22
    相关资源
    最近更新 更多