V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cococoder
V2EX  ›  程序员

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

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

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

    第 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   ·   实用小工具   ·   1121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:47 · PVG 07:47 · LAX 15:47 · JFK 18:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.