前端用 localstorage 保存部分数据用于数据回显,当用户切换账号时会出现数据串号的情况,如何解决? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cococoder
V2EX    程序员

前端用 localstorage 保存部分数据用于数据回显,当用户切换账号时会出现数据串号的情况,如何解决?

  •  
  •   cococoder 2019-10-11 20:27:12 +08:00 5934 次点击
    这是一个创建于 2240 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,当然出现这个问题是当初设计的问题,没有做唯一标识识别,解决串号简单,但是该如何兼容老数据是个问题,如何保证上线后,不影响之前用户已经缓存在本地的数据

    第 1 条附言    2019-10-12 10:08:15 +08:00
    看到很多人说直接清除,但是这样会丢失老数据,影响用户体验,如果人家换号了,直接清除还行,没有换号,结果数据丢了就很奇怪了,比较蛋疼
    29 条回复    2019-10-12 16:20:02 +08:00
    fengxianqi
        1
    fengxianqi  
       2019-10-11 20:34:05 +08:00 via Android
    让旧数据全部失效
    murmur
        2
    murmur  
       2019-10-11 20:51:45 +08:00
    注销的时候不清除数据么?或者用 cookies,
    ayase252
        3
    ayase252  
       2019-10-11 20:56:11 +08:00
    注销清空所有保存的状态
    lneoi
        4
    lneoi  
       2019-10-11 20:59:12 +08:00
    退出时清空,或者登陆存数据时清空旧数据,也可以增加一个字段做用户识别,看你具体数据情况
    lukunlin
        5
    lukunlin  
       2019-10-11 23:31:24 +08:00   1
    串号明显是你的业务代码有问题.
    建议做给导图理清楚自己的登录系统的逻辑.
    毕竟用 localStorage 存 token 也好还是其他,那么多人用都没什么问题
    liuy1994g
        6
    liuy1994g  
       2019-10-12 03:03:59 +08:00 via Android
    你们什么数据这么重要还存本地,直接作废不就行了
    keelii
        7
    keelii  
       2019-10-12 06:22:56 +08:00
    用 ls 有个基本的逻辑,如果缓存的数据是没有个体差异的那就随便存,如果有那就要在缓存中添加必要的字段来区分数据。不过你得考虑到 ls 有大小限制,并不能让你当数据库使用。
    reus
        8
    reus  
       2019-10-12 06:46:16 +08:00
    写代码把老数据迁移就行了
    迁移完就删除
    yuang
        9
    yuang  
       2019-10-12 07:50:29 +08:00 via Android
    d2-admin 的做法是使用版本号和用户 id 作为标识,项目更新后之前的缓存自动失效
    hanxiV2EX
        10
    hanxiV2EX  
       2019-10-12 07:59:13 +08:00 via Android
    区分用户数据和设备数据,谁生产的垃圾谁收拾。
    IsaacYoung
        11
    IsaacYoung  
       2019-10-12 08:19:29 +08:00
    localStorage.setItem(`${userId: ${key}}`, value)
    ashong
        12
    ashong  
       2019-10-12 08:23:53 +08:00 via iPhone
    查看有没有某个新数据,没有就全部读取写为新格式
    ccyu220
        13
    ccyu220  
       2019-10-12 08:24:33 +08:00
    我们系统用 customer id 来做标识符
    xuanbg
        14
    xuanbg  
       2019-10-12 08:38:08 +08:00
    数据要长久保存的话,加上用户 ID 作标识,取的时候用用户 ID 作条件查询即可。不需要长久保存的话,注销的时候清理掉就可以了。
    sannyzeng
        15
    sannyzeng  
       2019-10-12 09:02:15 +08:00
    先检测一下哪些数据是属于会产生串号的数据,打开的时候直接清除。
    后续的新数据都加上用户标识,就可以过渡了
    fishbone0
        16
    fishbone0  
       2019-10-12 09:40:43 +08:00
    给缓存附带用户唯一标识,串号是你业务代码有问题
    kang77649119
        17
    kang77649119  
       2019-10-12 10:41:11 +08:00
    根据用户 id 存数据, 取数据的时候根据用户 id 取,串号问题解决,老数据也不用清除
    sjfkai
        18
    sjfkai  
       2019-10-12 10:45:30 +08:00
    老数据可以在用户访问的时候整体刷一遍,带上用户标识。这样不就可以兼容老数据了…
    lands
        19
    lands  
       2019-10-12 11:26:31 +08:00
    存的时候, key 带上用户标识
    cococoder
        20
    cococoder  
    OP
       2019-10-12 11:55:10 +08:00
    @kang77649119 但是过渡阶段,用户已经缓存在本地的老数据虽然不用清除,但也没用上了
    cococoder
        21
    cococoder  
    OP
       2019-10-12 11:56:45 +08:00
    @sjfkai 刷数据的时候会不会把另一个账号的老数据刷到另一个账号的下面?
    kang77649119
        22
    kang77649119  
       2019-10-12 14:23:54 +08:00
    @cococoder 那就需要看看老数据中是否有数据来区分是属于哪个用户了,如果不属于当前用户就不要使用,属于当前用户就以当前用户为 key,再存一次。
    cococoder
        23
    cococoder  
    OP
       2019-10-12 14:54:47 +08:00
    @kang77649119 hhh 又绕回来了....如果能区分属于哪个用户的,那就不会出现串号的情况了
    KuroNekoFan
        24
    KuroNekoFan  
       2019-10-12 15:07:21 +08:00
    要么就是特定用户 id 对应特定信息,要么就是切换用户的时候清空信息
    cococoder
        25
    cococoder  
    OP
       2019-10-12 15:07:37 +08:00
    @fengxianqi 简单粗暴
    Ixizi
        26
    Ixizi  
       2019-10-12 15:10:23 +08:00
    默认用老数据 切换用户的时候把老数据清了 切完了存带标识的数据
    MiBAO
        27
    MiBAO  
       2019-10-12 15:46:22 +08:00
    这种明显应该是要清除的吧 ,感觉信息尽量不要留着用了就销毁掉 , 退出的时候记得清一些没有清的
    rioshikelong121
        28
    rioshikelong121  
       2019-10-12 15:53:00 +08:00
    自己封装一下 localStorage. 我们项目就是这么干的。

    ls 只存非敏感的用户信息。并且对于特殊字段加密存储。

    当时这么做的目的是: 因为有好几个网站共用了一个域名,所以封装了一下 localStorage. 在存储的时候自动添加站点前缀做隔离。
    cococoder
        29
    cococoder  
    OP
       2019-10-12 16:20:02 +08:00
    @rioshikelong121 嗯,是自己封装的 ls,要是最开始前缀用的是用户标识就不会有串号的问题了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     969 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:09 PVG 07:09 LAX 15:09 JFK 18:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86