发布于 1970-01-01 08:00
  • 10 个回答
    • 你总是要在后台存储“url是否访问过”这个信息的,这一点跑不了,凭算法手段无法消灭这个问题。

      但这个需求的容易之处在于:请求与请求之间是没有联系的,你可以用任意的方法去分表、分库。例如以URL作为分桶依据(注),直接把数据库请求分散到数据库集群中。上千万上亿也是能做到的。

      这个需求的真正困难之处在于原子性,即两个请求同时到达服务器时,如何抵抗两个事务同时操作数据库的时间差,造成的数据不一致。

      不过这一点的解决也可以靠分表+数据库的锁机制实现。分表分库在这里更是同时承担了(1)分担请求数量压力(2)分担加锁带来的性能压力两个作用。


      注1:当然实务上,要先对URL要做一下规范化,避免?v1=1&v2=2?v2=2&v1=1被判定为不同的URL等乌龙情况发生。

      注2:实际上根据业务逻辑,用单次有效的索引字符串/token/nonce key(不管叫啥了,随你喜欢)做key才是最好的,省的处理URL的麻烦。

      注3:一般而言数据库集群套件,会自动承担平摊分桶的算法,无需手工编写。

      2022-11-30 23:48 回答
    • url本身没有变化, 那服务器端总得有什么东西变化
      所以若要严格保证1次, 保存这件事感觉是逃不掉的

      你现在这个就不用存整个url,存nonce就可以

      2022-11-30 23:48 回答
    • 加临时令牌不行??

      2022-11-30 23:48 回答
    • 不需要整个url,其实说穿了就是访问你的网页需要凭密码,而且密码只能用一次。
      你自己设想的方法中,session不是全局的,所以用不了,只有数据库或者redis两种选择。

      实在是无法理解为什么要让url失效...

      2022-11-30 23:48 回答
    • 不管用上面方法存储, 服务器不存储怎么可能做的到

      2022-11-30 23:48 回答
    • 随机串取长一点儿。URL有有效时间,然后存储那些 URL 有效。可以存储在数据库,定时+访问过后清理数据库。
      一般的注册用户邮箱验证/修改密码就是这样的。
      从概率上来说,未获得合法 随机数和 sign 的恶意攻击者在有效时间内是遍历不出所有可能的。如果再加一些IP尝试次数限制,这样做就很安全了。

      如果你不是要验证,一个URL 可以访问最多一次的话 nonce 设为一个递增的数吧。

      2022-11-30 23:48 回答
    • 访问过之后写个cookie

      2022-11-30 23:48 回答
    • 毫秒级时间戳加随机字符串HASH值作为key有效时间缓存任意内容(简单即可如1),先时间戳判断有效时间,再验证该缓存是否存在,这两参数必传

      2022-11-30 23:48 回答
    • 你主要不是纠结数据量的问题吗?
      那么,为!什!么! 不用COOKIE, 将数据保存在用户本地终端

      2022-11-30 23:48 回答
    • 通过timestamp来做就好办很多了, 一般timestamp超过一定范围就当做是无效url, 所以nonce入库或者redis, 一段时间后失效就好,因为会先用timestamp判断这个请求是否过期, 再用nonce来判断是否重复请求., timestamp范围30秒左右基本上是够用了的

      2022-11-30 23:48 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有