在我们的项目中,我们允许用户为某些服务购买优惠券(WooCommerce产品)。我们将每个优惠券保存为一个自定义的post类型,并在购买过程中插入所有客户数据。
然后,我们通过电子邮件发送链接,以PDF格式下载优惠券。我们使用WooCommerce PDF Invoices & Packing Slips
生成PDF和链接的插件按以下方式生成:
$url = wp_nonce_url( admin_url( \'admin-ajax.php?action=generate_wpo_wcpdf&template_type=Coupon-PDF&order_id=\' . $order->id ), \'generate_wpo_wcpdf\' );
问题显然是nonce的生存期。我们需要链接至少激活一年,这意味着我们应该将nonce设置为2年。我做了不少研究,但找不到合适的信息。
Question is: nonce的最大生存期是多少?
Additionally: 如果有人能分享他们将nonce寿命延长很多的经验,那就太好了,就像这个例子一样。
SO网友:Josip Ivic
随着时间的变化,WordPress需要允许上午10:01生成的nonce在上午10:02有效。它通过使用时间“勾号”而不是实际时间来完成此操作,实际时间分两步生成:
首先将一个nonce的寿命(以秒为单位)除以2,然后将Unix时间戳除以上述值,然后使用ceil()将其四舍五入默认情况下lifespan is 86400 seconds, 或24小时(并且可以使用nonce_life
过滤器)。其中一半,12小时,是43200。
临时警告基于24小时的寿命,一天中每12小时的“滴答声”都是相同的。上午7:45,“滴答声”与上午9:30和11:59相同。但它将比下午12:01(一天内新的12小时)或下午15:30创建的“滴答声”少一个。
因此,WordPress nonce从创建之日起的24小时内无效,但最长24小时内有效,这取决于创建nonce的时间间隔为12小时。
Further reading: https://medium.com/myatus/wordpress-caching-and-nonce-lifespan-bb357d984da9