我有一个员工打卡上下班的考勤表项目。如果是在下午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
,每次都会发生变化,且是唯一的。_08_07_2014_08_01_57_pm
也发生了变化。 你也可以使用UNIX的TIMESTAMP。
time()
生成的功能使用:
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;
}