web本地存储(localStorage、sessionStorage)

本文介绍了Web本地存储技术,包括localStorage和sessionStorage的区别及应用。详细解释了如何在React项目中利用这两种存储方式来保存用户的登录状态,确保用户体验的连续性和便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web 本地存储 (localStorage、sessionStorage)

说明

对浏览器来说,使用 Web Storage 存储键值对比存储 Cookie 方式更直观,而且容量更大,它包含两种:localStorage 和 sessionStorage

  1. sessionStorage(临时存储) :为每一个数据源维持一个存储区域,在浏览器打开期间存在,包括页面重新加载

  2. localStorage(长期存储) :与 sessionStorage 一样,但是浏览器关闭后,数据依然会一直存在

API

sessionStorage 和 localStorage 的用法基本一致,引用类型的值要转换成JSON

1. 保存数据到本地
    const info = {
        name: 'Lee',
        age: 20,
        id: '001'
    };
    sessionStorage.setItem('key', JSON.stringify(info));
    localStorage.setItem('key', JSON.stringify(info));
2. 从本地存储获取数据
    var data1 = JSON.parse(sessionStorage.getItem('key'));
    var data2 = JSON.parse(localStorage.getItem('key'));
3. 本地存储中删除某个保存的数据
    sessionStorage.removeItem('key');
    localStorage.removeItem('key');
4. 删除所有保存的数据
    sessionStorage.clear();
    localStorage.clear();
5. 监听本地存储的变化

Storage 发生变化(增加、更新、删除)时的 触发,同一个页面发生的改变不会触发,只会监听同一域名下其他页面改变 Storage

    window.addEventListener('storage', function (e) {
        console.log('key', e.key);
        console.log('oldValue', e.oldValue);
        console.log('newValue', e.newValue);
        console.log('url', e.url);
    })

浏览器查看方法

    1. 进入开发者工具
    1. 选择 Application
    1. 在左侧 Storage 下 查看 Local Storage 和 Session Storage

Application

结合 React 实现用户基本数据的本地存储

界面UI方面的就不展示了,编写两个组件:<Login/>负责登录输入验证; <Home/> 项目主页,展示用户信息

1. 需求
  • <Login/> 组件可以得到用户输入的账号、密码,向服务器发送请求后获得 {id:'',name:'',tel:''}
  • 这些数据是 <Home/>组件正确展示所必须的,否则就会跳转到登录页
  • 我们需要让用户 直接打开主页就可以展示用户信息,不要再跳转到登录页
2. 实现
  • 用户在登录页填写登录信息后,将登录数据存储到 localStorage
  • 进入主页,首先获取 localStorage 中的数据,存在数据在直接展示,否则进入登录页
1. 登录数据存储到 localStorage

在登录页路由中配置离开页面时处理函数,存储的数据一小时内有效

    <Route path="login" component={Login} onLeave={leaveLoginPage}/>
    import store from '../store/index';

    // login 页面 离开时逻辑
    export const leaveLoginPage = () => {
       // 离开 login 页面 更新 localStorage 中的数据
       const {id, name, tel} = store.getState().rootReducer;
       const userInfo = {id, name, tel};
       const userInfoState = localStorage.getItem('userInfoState');

       if (userInfoState) {
          // 如果本地存在 userInfoState 将其移除
          localStorage.removeItem('userInfoState');
       }
       localStorage.setItem('userInfoState', JSON.stringify({
          userInfo,
          timestamp: new Date().getTime()
       }));
    }
2. 进入主页获取 localStorage 中数据

在主页路由中配置进入页面时处理函数

    <Route path="home" component={Home} onEnter={enterHomePage}>
    import store from '../store/index';

    // show 页面进入 逻辑
    export const enterHomePage = (nextState, replace, next) => {
       const rootState = store.getState().rootReducer;
       const userInfoState = JSON.parse(localStorage.getItem('userInfoState'));

       // 判断store 中是否有用户登录数据
       if (!rootState.isLogin) {
          // 不含有用户登录数据,判断 localStorage 中的数据是否可以使用
          const pass = userInfoState && userInfoState.timestamp && new Date().getTime() - userInfoState.timestamp <= 60 * 60 * 1000;

          if (pass) {
             // userInfoState 存在,并且上一次离开在一小时以内,可以读取 localStorage 数据
             const storedUserInfo = userInfoState.userInfo;

             // 'LOGIN' 将获取的数据更新到 store 中
             store.dispatch({type: 'LOGIN', msg: storedUserInfo});
             next();
          } else {
             // userInfoState 不存在 或者 已过期,则跳转到登录页
             replace('/login');
             next();
          }
       } else {
          // store 中 含有 用户登录数据,直接进入相应页面
          next();
       }
    }
Web 应用程序中,我们经常需要在浏览器中保存一些数据,以便在下一次访问应用程序时可以直接读取这些数据。为了实现这个功能,Web 浏览器提供了两种本地数据存储方式:`localStorage` 和 `sessionStorage`。 `localStorage` 和 `sessionStorage` 都是浏览器提供的 JavaScript API,可以用来在浏览器中保存和读取数据。它们的主要区别在于数据的生命周期和作用域。 `localStorage` 中保存的数据是永久性的,除非用户手动清除,否则数据将一直保存在浏览器中。而 `sessionStorage` 中保存的数据只在当前会话中有效,当用户关闭浏览器窗口或标签页时,数据将被删除。 另外,`localStorage` 中保存的数据可以在不同的窗口或标签页中共享,而 `sessionStorage` 中保存的数据只能在同一个窗口或标签页中共享。 在 JavaScript 中,我们可以使用以下代码来读取和保存数据到本地存储中: ``` // 保存数据到 localStoragelocalStorage.setItem('key', 'value') // 从 localStorage 中读取数据 const value = localStorage.getItem('key') // 从 localStorage 中删除数据 localStorage.removeItem('key') // 清空 localStorage 中的所有数据 localStorage.clear() ``` 类似地,我们可以使用 `sessionStorage` 来读取和保存数据: ``` // 保存数据到 sessionStoragesessionStorage.setItem('key', 'value') // 从 sessionStorage 中读取数据 const value = sessionStorage.getItem('key') // 从 sessionStorage 中删除数据 sessionStorage.removeItem('key') // 清空 sessionStorage 中的所有数据 sessionStorage.clear() ``` 需要注意的是,`localStorage` 和 `sessionStorage` 中只能保存字符串类型的数据,如果需要保存其他类型的数据,需要先将其转换为字符串类型。例如,我们可以使用 `JSON.stringify` 方法将 JavaScript 对象转换为字符串,然后再保存到本地存储中。在读取数据时,需要使用 `JSON.parse` 方法将字符串转换为 JavaScript 对象。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值