当用户点击按钮和超链接到另一个页面时,插入随机数到URL


Insert random number into URL when user clicks on button and hyperlink to go to another page

我有一个员工打卡上下班的考勤表项目。如果是在下午4点之后,他们必须在下班按钮出现之前提交一份值班日志。

项目已经完成,功能正常,但我发现了一些缺陷,员工可以通过实际填写一次并保存值班日志提交页面的URL来绕过必须填写值班日志。

用户甚至可以保存clock out URL,这样他们就不必填写他们的值班日志(他们可以在被要求填写时输入clock out URL)。我想通过将随机数插入url来防止员工这样做,因此当用户单击url或超链接时,url每次都包含一个随机数。

我尝试了这两个,但它没有工作。我的思路对吗?欢迎提出意见和建议。如果可以的话,你能举个例子吗?提前感谢。

超链接:

var url = "http://www.mypage.com/index.php?"+Math.random()
<a href="http://www.mypage.com/index.php?1" onClick="this.href=this.href.split('?')[0]+'?'+new Date().getTime()">Mostly random</a>

按钮:

echo "<form action='ClockOut.php'+Math.random() method='post'>
            <span style='"background-color: #FFFF00'">**Please Clock Out when your shift ends**</span>
            <input value='Clock Out' id='Submit2' type='submit' /></td>               
            </form>";

使用服务器端PHP方法有很多方法,但这里有一个示例:

<a href="timekeeper.php?var<?php echo uniqid() . date('_m_d_Y_h_i_s_a', time());?>">Log time</a>

当点击链接时将产生如下内容:

http://www.example.com/timekeeper.php?var53e4137591352_08_07_2014_08_01_57_pm

分解:

isset($_GET)中取?var

if(isset($_GET["var"])) {
    echo "SUCCESS";
}

,

  • uniqid()生成的53e4137591352,每次都会发生变化,且是唯一的。

  • time()生成的
  • _08_07_2014_08_01_57_pm也发生了变化。

    • 你也可以使用UNIX的TIMESTAMP。

    功能使用:

    • date()

    • time()

    • uniqid()

    因此,如果需要,您可以将uniqid()替换为员工的ID号(例如),以及附加任何其他基于随机的或时间的函数,只要它们被正确格式化和连接。

    Fred -ii-是对的。最好使用服务器端解决方案(在这种情况下是PHP),因为JS可以被禁用。几分钟之内,我就找到了这两种情况的解决方案。不知道你有没有做过研究。

    解决方案1 (PHP):

    function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
    }
    

    解决方案2 (JS):

      function makeid()
     {
      var text = "";
      var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
      for( var i=0; i < 5; i++ )
        text += possible.charAt(Math.floor(Math.random() * possible.length));
      return text;
    }