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

时间:2014-08-07 19:31:31

标签: javascript php hyperlink

我有一个时间表项目,员工可以进入和退出。如果是在下午4点之后,他们必须在出现时钟输出按钮之前提交一份值班日志。

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

此外,用户甚至可以保存时钟输出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>";

2 个答案:

答案 0 :(得分:2)

使用服务器端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

细分:

?var取自isset($_GET)

if(isset($_GET["var"])) {

    echo "SUCCESS";

}

然后,

    53e4137591352生成的
  • uniqid(),每次都会更改并且是唯一的。

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

    • 您也可以使用UNIX TIMESTAMP。

使用的功能:

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

我希望这会有所帮助。

答案 1 :(得分:1)

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;
}