V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kyuuseiryuu
V2EX  ›  问与答

短信验证码应该入库还是只在内存中暂存?

  •  
  •   kyuuseiryuu · 2017-05-10 12:09:50 +08:00 · 6891 次点击
    这是一个创建于 2789 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天和项目讨论关于短信验证码存放;

    我的主要观点是:放内存中,比如 Session 或者 ServletContext。

    项目经理的观点是:放数据库里。

    项目是个小项目,并发不大。
    36 条回复    2017-05-11 11:43:29 +08:00
    ys0290
        1
    ys0290  
       2017-05-10 12:16:45 +08:00 via iPhone
    过一会儿就失效的东西入库干嘛😱
    zuk
        2
    zuk  
       2017-05-10 12:19:40 +08:00 via iPhone
    事后审计,不过意义不大吧
    Weny
        3
    Weny  
       2017-05-10 12:20:10 +08:00 via iPhone   ❤️ 1
    redis
    kyuuseiryuu
        4
    kyuuseiryuu  
    OP
       2017-05-10 12:28:07 +08:00 via Android
    @ys0290 对呀我也觉得很奇怪。
    kyuuseiryuu
        5
    kyuuseiryuu  
    OP
       2017-05-10 12:29:08 +08:00 via Android
    @zuk 确实,如果是邀请码之类的我觉得是有必要入库的。
    jarlyyn
        6
    jarlyyn  
       2017-05-10 12:30:11 +08:00
    项目管细节么?

    项目不是应该提细节么?

    比如

    “验证码能够保留在服务器上 XXX 时间,以便随时审核”
    kyuuseiryuu
        7
    kyuuseiryuu  
    OP
       2017-05-10 12:31:55 +08:00 via Android   ❤️ 1
    @Weny 我也是这么和项目经理说的,memcache, redis 之类的他说要搞分布式数据库才上那些东西。我感觉内存型数据库和关系型数据库的分布式没有必然联系哇~
    kyuuseiryuu
        8
    kyuuseiryuu  
    OP
       2017-05-10 12:33:14 +08:00 via Android
    @jarlyyn 并没有这种细节,只有 IP 请求数量限制,手机号请求数量限制以及过期时间限制。
    actto
        9
    actto  
       2017-05-10 12:48:27 +08:00 via Android
    发短信不要钱吗?入库好统计成本。
    x7395759
        10
    x7395759  
       2017-05-10 12:52:57 +08:00
    嗯,项目经理为什么要管这个?
    kyuuseiryuu
        11
    kyuuseiryuu  
    OP
       2017-05-10 12:55:30 +08:00 via Android
    @actto 原来如此,他肯定也没想到这点~
    kyuuseiryuu
        12
    kyuuseiryuu  
    OP
       2017-05-10 12:57:57 +08:00 via Android
    @x7395759 小公司,开发才 5 个人,包括我 3 个实习生。项目经理算是一个,还有个前端。项目经理他负责搭框架写,写计划之类的。
    x7395759
        13
    x7395759  
       2017-05-10 13:02:46 +08:00
    @kyuuseiryuu 那就没啥好说了,存库还是存 redis 还是存 session 都没有关系,只要能用就行。

    常规存 session 和 redis,存库审计和统计成本是没意义的,感觉项目经理想法有些固定。
    hoythan
        14
    hoythan  
       2017-05-10 13:05:45 +08:00
    你大还是他大? 他大就听他的.
    xinyewdz
        15
    xinyewdz  
       2017-05-10 13:10:24 +08:00
    建议入库,统计和审查都比较方便。一般的项目,日志都需要保存几个月。更何况这种业务数据。
    reed1992
        16
    reed1992  
       2017-05-10 13:19:45 +08:00   ❤️ 1
    入库,业务方使用方便
    akira
        17
    akira  
       2017-05-10 13:23:52 +08:00   ❤️ 1
    我的话 就会要求入库或者日志。

    生产服上面的日志,从来只会嫌少 不会嫌多的。
    kyuuseiryuu
        18
    kyuuseiryuu  
    OP
       2017-05-10 13:30:11 +08:00 via Android
    @hoythan
    表情(小纠结)
    kyuuseiryuu
        19
    kyuuseiryuu  
    OP
       2017-05-10 13:30:40 +08:00 via Android
    @xinyewdz 原来如此。
    ideascf
        20
    ideascf  
       2017-05-10 13:42:35 +08:00   ❤️ 1
    入库就入呗, 当你遇到让你去日志里面捞验证码的时候,你就明白项目经理是对的了
    wildcat007
        21
    wildcat007  
       2017-05-10 14:02:35 +08:00   ❤️ 1
    新网案法规定,日志必须至少保留 180 天。(我瞎编的)
    这种东西有日志总比没日志强~后期什么大数据分析,都是数据来源。
    kyuuseiryuu
        22
    kyuuseiryuu  
    OP
       2017-05-10 14:18:47 +08:00 via Android
    @wildcat007 感觉验证码没有大数据分析的价值哇,验证码规律和客户端 IP 或者手机号没有必然联系。
    wildcat007
        23
    wildcat007  
       2017-05-10 14:30:46 +08:00
    @kyuuseiryuu 感谢回复,我第一句只是调侃。验证码如果设置有失效时间,那么不用入库。但是一般请求验证码接口的一些信息,可能需要入库,比如 UA、IP 等等。
    UA 主要是分辨 浏览器类型、版本、手机端等等,甚至可以获取系统信息、手机型号等等。
    然后就是 IP 信息。
    这些应该都是保存的吧。当出现问题的时候,这些数据都是有据可查的基础呀。
    比如被人把短信接口做短信轰炸了?或者 某个地区的 访问量异常增加了?
    domty
        24
    domty  
       2017-05-10 14:34:11 +08:00   ❤️ 1
    外部缓存 redis 之类的数据库里

    往程序内存里写的话你重新发布的时候怎么办,强制所有短信验证码失效?
    至于统计,写日志里就行
    kyuuseiryuu
        25
    kyuuseiryuu  
    OP
       2017-05-10 15:04:36 +08:00 via Android
    @wildcat007 嗯~有道理。
    ChoateYao
        26
    ChoateYao  
       2017-05-10 16:37:48 +08:00
    写成可配置存储验证码,要进数据库就进数据库,要进内存就进内存。
    如果下次说要写进文件呢?
    Ouyangan
        27
    Ouyangan  
       2017-05-10 17:10:55 +08:00
    redis , 统计用日志呗
    kyuuseiryuu
        28
    kyuuseiryuu  
    OP
       2017-05-10 18:17:18 +08:00 via Android
    @ChoateYao 老司机~机智又厉害
    fxxkgw
        29
    fxxkgw  
       2017-05-10 18:36:55 +08:00
    第一眼看到这个问题 我以为 LZ 是想说手机收到验证码是不是可以在超时后自动销毁 省的一大堆在短信里碍眼 看来我想多了。。
    senghoo
        30
    senghoo  
       2017-05-10 18:55:18 +08:00   ❤️ 1
    使用 OTP 算法生成验证码和做验证。
    这样时间有效期和生成,校验一起搞定了。
    kyuuseiryuu
        31
    kyuuseiryuu  
    OP
       2017-05-10 19:14:56 +08:00 via Android
    @senghoo 学到了~ cool
    wanglaihuai
        32
    wanglaihuai  
       2017-05-10 20:56:34 +08:00 via Android
    @hoythan 这是最实在的回答了,哈哈哈,赞一个。
    lan894734188
        33
    lan894734188  
       2017-05-10 20:59:01 +08:00 via Android
    redis 后慢慢存库
    wdd2007
        34
    wdd2007  
       2017-05-10 21:23:43 +08:00
    小项目,并发不大,入库就入库呗。
    whileFalse
        35
    whileFalse  
       2017-05-10 22:31:34 +08:00
    @senghoo 有必要吗? redis 自带过期啊

    以手机号为 key,验证码为 value。
    不要放 session 里,毕竟你还要控制每个手机号的请求数量。
    lianxiaoyi
        36
    lianxiaoyi  
       2017-05-11 11:43:29 +08:00   ❤️ 1
    有必要入库。。。记录上用户的 IP 以及其它很多信息。。。。不然短信被刷了你都不知道。。我就查到过。。。。。。。。。还有短信接口返回值也要记录。。。我们很多用户反馈收不到短信。。。这样就有数据可查。。。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2512 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:47 · PVG 12:47 · LAX 20:47 · JFK 23:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.