通过cookie和localstorage实现数据持久化

铁佛  金牌会员 | 2022-6-26 03:31:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 542|帖子 542|积分 1626

最近在写vue项目的时候,把登录的用户信息放在Vuex(store)中,但只要页面一刷新,登录时存入Vuex(store)的数据就被清除了,为解决这一问题,我决定将用户登录信息存入cookie中。
   注意:cookie只能存储非常小的数据,大量的数据可存储于localstorage中
  安装插件

使用cookie前,需要安装相应的插件,localstorage无需安装插件
  1. npm install js-cookie --save
复制代码
封装方法

新建/src/utils/cookie.js (文件夹和文件名可根据自己的习惯命名)
  1. import cookie from 'js-cookie'    //导入插件
  2. export function getCookie(key) {   //获取,key为要获取的cookie
  3.   return cookie.get(key)
  4. }
  5. export function setCookie(key, data) {   //设置,key为要设置的cookie名,data为对应的值
  6.   return cookie.set(key, data)
  7. }
  8. export function removeCookie(key) {     //删除,key为要删除的cookie
  9.   return cookie.remove(key)
  10. }
复制代码
新建/src/utils/storage.js
  1. export function getStorage(key) {
  2.   return JSON.parse(localStorage.getItem(key))   //JSON.parse()用于解析Json字符串
  3. }
  4. export function setStorage(key, data) {
  5.   localStorage.setItem(key, JSON.stringify(data))   //JSON.stringif()用于将JS对象转换为JSON字符串
  6. }
  7. export function removeStorage(key) {
  8.   localStorage.removeItem(key)
  9. }
复制代码
实战

此实战案例是在vue+mysql实现登录案例的基础上构建的,有需要请自行移步
Vuex(store)

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import { getCookie, removeCookie, setCookie } from '../utils/cookie'   //导入对应方法
  4. import { getStorage, removeStorage, setStorage } from '../utils/storage'
  5. Vue.use(Vuex)
  6. export default new Vuex.Store({
  7.   state: {
  8.     username: getCookie('username'),
  9.     info: getStorage('info')
  10.   },
  11.   mutations: {
  12.     setCookie(cookie) {
  13.       setCookie(cookie.key, cookie.data)
  14.     },
  15.     removeCookie(key) {
  16.       removeCookie(key)
  17.     },
  18.     setStorage(storage) {
  19.       setStorage(storage.key, storage.data)
  20.     },
  21.     removeStorage(key) {
  22.       removeStorage(key)
  23.     }
  24.   }
  25. })
复制代码
  对于Vuex(store)方法定义、方法调用、参数传递等知识不了解的,可参考这里,或自行去找文章或视频学习,这里不做赘述,直接使用了
  登陆页面

输入用户名和密码,登陆成功时,将用户名存入cookie
  1. <template>
  2.   
  3.    
  4.         <h2>登录页面</h2>
  5.         <el-form ref="form" :model="form" label-width="20%">
  6.         <el-form-item label="用户名:">
  7.             <el-input v-model="form.username"></el-input>
  8.         </el-form-item>
  9.         <el-form-item label="密  码:">
  10.             <el-input v-model="form.password" type="password"></el-input>
  11.         </el-form-item>
  12.         </el-form>
  13.         <el-button type="primary" round @click="login" class="btn">登录</el-button>
  14.    
  15.   
  16. </template>
复制代码
首页

  1. <template>
  2.   
  3.           <h2>欢迎:{{username}}</h2>
  4.     <a @click="out">退出登录</a>
  5.   
  6. </template>
复制代码
效果演示


  cookie

这样,即使页面刷新,数据也不会被清除了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表