• 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>

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:
    Python基础---线程
    virtualenv和virtualenvwrapper的安装和使用
    微信公众号实现简易的物联网控制(二)
    PyQt5之SQLite数据库操作(1)
    PyQt5无边框后窗口的移动方法
    PyQt5显示GIF图片
    Python显示进度条的方法
    WinSCP默认使用root用户登录的方法
    微信公众号实现简易的物联网控制(一)
    Arduino语音天气预报(三)
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10460110.html
Copyright © 2020-2023  润新知