我一直在撞墙试图获得与此PHP代码段相当的JavaScript:
<?php
$id = 'uniqueID'
$now = round(time()/60);
$lock = md5($now . $id);
?>
我一直在尝试各种变体:
var timeInMin = new Date().getTime() / 60000;
var timestamp = Math.round(timeInMin);
var key = md5(timestamp + 'uniqueID');
使用here
中的md5脚本我只需要锁和钥匙来匹配。对我来说似乎很简单。我做错了什么?
答案 0 :(得分:1)
如前所述,如果时间不匹配则不会创建相同的哈希值。我在这种情况下所做的是找到将时间从php传递到客户端的方法,这样他们就可以使用相同的时间。
PHP方面:
<?php
$id = 'uniqueID';
$now = round(time()/60);
$lock = md5($now . $id);
print $lock;
setcookie("time",$now);
?>
客户端:
<script type="text/javascript">
var timestamp = getCookie("time");
var key = md5(timestamp + 'uniqueID');
console.log(key);
</script>
答案 1 :(得分:0)
具体而言(我的评论略显滑稽):
PHP是服务器端语言。当您的浏览器通过Internet(或甚至是本地计算机上的侦听端口)发出页面请求时,在服务器(或本地计算机)上运行的apache实例会在页面上执行PHP,然后将其吐回到浏览器。
然后浏览器会在页面上执行任何JavaScript,我们将其称为客户端。
因为您正在使用Math.round
,如果服务器执行PHP(服务器端)的时间与浏览器开始执行相关Javascript(客户端)之间的时间超过30秒,那么几分钟的时间会有所不同。使用Math.floor
会给你59秒的摆动空间,但这仍然很冒险,特别是在移动设备上。
即使假设页面在加载后立即执行JavaScript并且加载非常快,30秒的延迟也不会完全离开桌面,而在移动设备上也不是59。