zoukankan      html  css  js  c++  java
  • 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>

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:
    内核驱动系列中断和定时器
    apue2 阅读笔记第四章
    apue2 阅读笔记 第五章
    apue2阅读笔记 第6.7章
    再试试windows7版得writer
    内核驱动系列内核调试方法
    apue2 阅读笔记第三章
    杂谈关于代码库
    know everything about something
    React的父子传值(父传子)
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10460110.html
Copyright © 2011-2022 走看看