cookie猜数字游戏(下)------------以及cookie使用的不安全之处

1.通过cookie可以解决上篇中多个用户对数据的修改,每个COOKIE保存不同用户的数据

<?php
if(empty($_COOKIE['num'])||empty($_GET['num'])){
//第一次提交,执行这里面的代码
	$num=rand(0,100);
	setcookie('num',$num);
}else{
	//不是第一次提交
	$count = empty($_COOKIE['count']) ? 0:(int)$_COOKIE['count'];//如果是第一次猜count=0,如果不是第一次猜count就为当前的值

    if($count<10)
   {
    $num1=(int)$_GET['num']; //用户提交的数据
	$num2=(int)$_COOKIE['num'];//保存在cookie里面的数据
	$result=$num1-$num2;
	if($result==0){
		echo "猜对了";
		setcookie('num');
		setcookie('count');
	}elseif($result>0){
		echo "数字太大";
	}else{
		echo "数字太小";
	}

	setcookie('count',$count+1);//执行完一次就将$count加1
   }else{
       echo "游戏结束,挑战失败";
       setcookie('num');
       setcookie('count');
   }
	
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>猜数字</title>
  <style>
    body {
      padding: 100px 0;
      background-color: #2b3b49;
      color: #fff;
      text-align: center;
      font-size: 2.5em;
    }
    input {
      padding: 5px 20px;
      height: 50px;
      background-color: #3b4b59;
      border: 1px solid #c0c0c0;
      box-sizing: border-box;
      color: #fff;
      font-size: 20px;
    }
    button {
      padding: 5px 20px;
      height: 50px;
      font-size: 16px;
    }
  </style>
</head>
<body>
  <h1>猜数字游戏</h1>
  <p>Hi,我已经准备了一个0~100的数字,你需要在仅有的10机会之内猜对它。</p> 
  <form action="guss.php" method="post">
    <input type="number" min="0" max="100" name="num" placeholder="随便猜">
    <button type="submit">试一试</button>
  </form>
</body>
</html>

但是在使用COOKIE的时候存在不安全的地方。比如在这个案列中,如果用户是一个开发人员,通过控制台,就可以看到COOKIE里面的值

 

我们用session来解决这个问题

<?php
session_start();
if(empty($_SESSION['num'])||empty($_GET['num'])){
//第一次提交,执行这里面的代码
	$num=rand(0,100);
  $_SESSION['num']=$num;
	
}else{
	//不是第一次提交
	$count = empty($_SESSION['count']) ? 0:(int)$_SESSION['count'];//如果是第一次猜count=0,如果不是第一次猜count就为当前的值

    if($count<10)
   {
    $num1=(int)$_GET['num']; //用户提交的数据
	  $num2=(int)$_SESSION['num'];//保存在cookie里面的数据
	  $result=$num1-$num2;
	  if($result==0){
		echo "猜对了";
		unset($_SESSION['num']);
    unset($_SESSION['count']);
	}elseif($result>0){
		echo "数字太大";
	}else{
		echo "数字太小";
	}

	$_SESSION['count']=$count+1;//执行完一次就将$count加1
   }else{
       echo "游戏结束,挑战失败";
       unset($_SESSION['num']);
       unset($_SESSION['count']);
   }
	
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>猜数字</title>
  <style>
    body {
      padding: 100px 0;
      background-color: #2b3b49;
      color: #fff;
      text-align: center;
      font-size: 2.5em;
    }
    input {
      padding: 5px 20px;
      height: 50px;
      background-color: #3b4b59;
      border: 1px solid #c0c0c0;
      box-sizing: border-box;
      color: #fff;
      font-size: 20px;
    }
    button {
      padding: 5px 20px;
      height: 50px;
      font-size: 16px;
    }
  </style>
</head>
<body>
  <h1>猜数字游戏</h1>
  <p>Hi,我已经准备了一个0~100的数字,你需要在仅有的10机会之内猜对它。</p> 
  <form action="session2.php" method="get">
    <input type="number" min="0" max="100" name="num" placeholder="随便猜">
    <button type="submit">试一试</button>
  </form>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章