VUE使用localstorage和sessionstorage实现登录示例详解

目录
  • 正文
  • localstroage就是一个加强版的COOKIE。
  • 三者的异同
    • localStorage和sessionStorage操作
    • 登录实例:
    • Router.js

正文

今天这篇日志记录下做VUE登录的血泪史(VUE2)。

当时也不知道是咋想的,就认为php给VUE提供接口,可能session就不起作用了(现在的登录是用SESSION做的)。

可是登录需要做呀,用什么存储登录的用户信息呢。最开始我还真想过用COOKIE,但是安全性得不到保证,因为在每次HTTP请求的时候,都会把cookie中存储的数据携带在请求中。其实localstroage也不见得安全到那里去,可是总觉得新东西能好一点。

localstroage就是一个加强版的COOKIE。

localstroage与sessionstroage是HTML5的新属性。使用的相对方便。浏览器支持也做的很好。

这里着重说一下IE,官方给的说法是IE8及以上的浏览器支持。

但是网上大多数的说法是IE8本身是不支持的,只有到了IE9才支持。

这个我没试,IE浏览器我早早的就放弃了。有兴趣,可以试一试。

说到他们二者,就不得不和Cookie对比一下了。

三者的异同

特性 Cookie localStorage sessionStorage
数据的生命期 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,否则永久保存,可变相设置失效时间。 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4K左右 一般为5MB  
与服务器端通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通信  
易用性 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持  

localStorage和sessionStorage操作

localStorage和sessionStorage操作方法都一样,我觉得,他俩是一个玩意。就是‘生命周期不一样’。

setItem存储value

用途:将value存储到key字段

sessionStorage.setItem("key", "value");
localStorage.setItem("aaa", "111");
localStorage.name = "xuanyuan"

getItem获取value

用途:获取指定key本地存储的值

var value = sessionStorage.getItem("key");
var site = localStorage.getItem("asd");

removeItem删除key

用途:删除指定key本地存储的值

sessionStorage.removeItem("key");
localStorage.removeItem("asd");

clear清除所有的key/value

用途:清除所有的key/value

sessionStorage.clear();    
localStorage.clear();

其他操作方法:点 ‘.’ 操作和[ ]

web Storage不但可以用自身的setItem,getItem等方便存取,也可以像普通对象一样用点(.)操作符,及[]的方式进行数据存储,像如下的代码:

var storage = window.localStorage;
storage.key1 = "hello";
storage["key2"] = "world";
console.log(storage.key1);
console.log(storage["key2"]);

localStorage和sessionStorage的key和length属性实现遍历

sessionStorage和localStorage提供的key()和length可以方便的实现存储的数据遍历,例如下面的代码:

var storage = window.localStorage;
for(var i=0, len=storage.length; i<len;i++){
    var key = storage.key(i);
    var value = storage.getItem(key);
    console.log(key + "=" + value);
}

登录实例:

<template>
  <div class="bigdiv">
    <div class="twodiv">
      <div >
        <p><h2>登录</h2></p>
      </div>
      <div>
        <Input v-model="username" placeholder="账号" style="width: 300px"></Input>
        <Input v-model="password" placeholder="密码" style="width: 300px" type="password"></Input>
      </div>
      <div>
        <Button type="info" @click="executelogin()" class="but">登录</Button>
      </div>
    </div>
  </div>
</template>
<script>
// 引入axios组件
import axios from "axios";
import qs from "qs"; //处理数据  qs.stringify(params)
import {checkRule} from '@/assets/js/public';//引入公共js文件
export default {
  data(){
    return{
      username:'',
      password:''
    }
  },
  methods: {
    /**
     * 提交用户输入的登录信息
     */
executelogin() {
// 判断浏览器是否支持localstroage
if(!window.localStorage){
this.$Message.error(‘您的浏览器不支持localstorage');
          return false;
       }
      const self = this;//将this对象附到一个不可更改的变量中~
      axios({
          method: "post",
          url: "你的url",
          data: {username: this.username,password:this.password}
      })
      .then(function(response) {
          checkRule(response,self);//检查是否有权限
          if(response.data.status == 1){
         // 所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
            // 先存localStorage,再提示操作成功,然后跳路由
            // JSON.stringify:将对象转成字符串
            // JSON.parse():将字符串装换成对象
            let toll = JSON.stringify(response.data.toll);//将当前信息变成json字符串
            localStorage.toll = toll;//存储用户信息
            let nowtime = new Date().getTime();
            localStorage.logintime = nowtime;//存储登陆时间,判断登录是否过期
            self.$Message.success('登陆成功');
            self.$router.push({
                path:'/',    //这是路由名称
            })
          }else{
            alert("用户名或密码错误");
          }
      })
      .catch(function(response) {
          // alert("请求失败");
      });
    },
  }
}
</script>

Router.js

// 全局路由守卫
router.beforeEach((to, from, next) => {//在路由跳转之前做的事
  var userinfo = '';
  // 这个是使用localstronge存储方式存储的方法
  let nowtime = new Date().getTime();//获取当前时间戳  毫秒
  let sessiontime = nowtime - localStorage.logintime//当前时间  -  登录时间
  console.log(sessiontime)
  // 数据保存时间只有5个小时,超过5个小时,清除
  if (sessiontime > 18000000){
    localStorage.clear();
  }
  // 这是取值
  let userinfo = localStorage.userinfo;
}

以上示例是我博客后台管理系统登录所使用的登录存储登录数据的方法,更多关于VUE实现登录的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue实现登录界面

    使用Vue实现简单的用户登录界面,登录成功以后查询账号用户类型进行相应的页面路由跳转,效果如下图所示: HTML部分: <div class="loginbody">     <div class="login">       <div class="mylogin" align="center">         <h4>登录</h4>         <el

  • Vue实现简单登录界面

    本文实例为大家分享了Vue实现简单登录界面的具体代码,供大家参考,具体内容如下 实现: 界面实现 表单规则校验 结合后台 api 校验 提示消息 App.vue <template>   <div id="app"> <!--路由占位符 -->    <router-view></router-view>   </div> </template> <script> export defaul

  • Vue3实现登录表单验证功能

    目录 一.实现思路与效果图 二.实现具体过程 三.完整代码与效果图 一.实现思路与效果图 使用async-validator 插件,阿里出品的 antd 和 ElementUI 组件库中表单校验默认使用的 async-validator. 效果图: 二.实现具体过程 npm i async-validator -S 绑定loginForm const loginForm = reactive({ username: "", password: "", }); 初始化

  • vue实现通过手机号发送短信验证码登录的示例代码

    本文主要介绍了vue实现通过手机号发送短信验证码登录的示例代码,分享给大家,具体如下: <template> <div class="get-mobile" @touchmove.prevent> <div class="main"> <div class="pt-20 pr-15 pl-15 pb-20"> <input class="input mb-15" v-mod

  • vue-admin-template解决登录和跨域问题解决

    目录 一.下载安装项目 二.修改登录访问地址 三.解决跨域问题 一.下载安装项目 git地址:https://github.com/PanJiaChen/vue-admin-template.git 二.修改登录访问地址 找到 .env.develpment文件 # just a flag ENV = 'development' # base api # VUE_APP_BASE_API = '/dev-api' VUE_APP_BASE_API = 'http://localhost:9001

  • 如何利用vue+element ui实现好看的登录界面

    目录 界面效果图 下面直接上代码: 附加背景图片 总结 闲暇之余使用vue+element ui制作了个登录界面 话不多说,先上 界面效果图 下面直接上代码: <template> <div class="loginbody"> <div class="logindata"> <div class="logintext"> <h2>Welcome</h2> </div&

  • VUE使用localstorage和sessionstorage实现登录示例详解

    目录 正文 localstroage就是一个加强版的COOKIE. 三者的异同 localStorage和sessionStorage操作 登录实例: Router.js 正文 今天这篇日志记录下做VUE登录的血泪史(VUE2). 当时也不知道是咋想的,就认为php给VUE提供接口,可能session就不起作用了(现在的登录是用SESSION做的). 可是登录需要做呀,用什么存储登录的用户信息呢.最开始我还真想过用COOKIE,但是安全性得不到保证,因为在每次HTTP请求的时候,都会把cooki

  • vue cli4下环境变量和模式示例详解

    本文介绍了vue cli4下环境变量和模式示例详解,分享给大家,具体如下: 官方文档 环境变量 一个环境变量文件只包含环境变量的键值对: NODE_ENV=development VUE_APP_BASE_URL=http://127.0.0.1:8080/ 注意: NODE_ENV - 是 "development"."production" ."test"或者自定义的值.具体的值取决于应用运行的模式 BASE_URL - 会和 vue.con

  • Vue.extend实现组件库message组件示例详解

    目录 概述 Vue.extend message 组件配置对象(就是.vue文件) message 生成组件的函数 使用方法 效果图 总结 概述 当我们使用组件库的时候,某些组件并不是直接放到模板当中进行使用,而是通过api的方式调用生成组件并且挂在到我们的页面中,其中最常见的就是message组件,我们在组件库中看到的多数都是api调用的方式生成.记录自己基本实现message组件. Vue.extend 在vue中,要实现通过api方式实现组件的使用,这个aip是必不可少的,因此我们先了解下

  • 前端node Session和JWT鉴权登录示例详解

    目录 服务端渲染及session鉴权 服务端渲染 优点 缺点 服务端身份验证Session原理 实践操作 其他 缺陷 关于跨域 想说的 JWT鉴权 适用情况 JWT鉴权原理 JWT header payload signature 实践 想说的 Token有效期问题 redis数据库及动态Token解决方案 最后 服务端渲染及session鉴权 服务端渲染 服务端渲染简单来说就是前端页面是由服务器通过字符串拼接动态生成的,客户端不需要额外通过Ajax请求参数,只需要做好渲染工作即可. 优点 前端

  • Vue中关于this指向的问题示例详解

    目录 由Vue管理的函数 不被vue管理的函数 this指向大致分类 总结 在Vue中,方法体里用this调用vue实例的数据,有时会指向window,导致调用失败报错. 由Vue管理的函数 例如: computed 计算属性 watch 监视属性 filters (Vue3中已弃用且不再支持) 过滤器.... 上述属性里配置的函数不要采用箭头函数写法,因为箭头函数没有自己的this对象,使用this时会向外找到window,不会指向Vue实例,也就调用不到Vue中的数据. 不被vue管理的函数

  • vue最简单的前后端交互示例详解

    一.学习 vue 面临的问题 最近想学一门前端技术防身,看到博客园中写 vue 的多,那就 vue 吧.都说 vue 的官方教程写得好,所以我就从官方教程开始学习.官方教程说"Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用."但是这个概念是个什么鬼?还是让人一头雾水嘛.而且我一开始也没有搞清楚 vue 的定位,只知道它是一个前端库,但是确实不知道它的优势是什么,还以为它是一个学会就能一劳

  • Vue自定义组件的四种方式示例详解

    四种组件定义方式都存在以下共性(血泪史) 规则: 1.组件只能有一个根标签 2.记住两个词全局和局部 3.组件名称命名中'-小写字母'相当于大写英文字母(hello-com 相当于 helloCom) 而对于在HTML中自定义组件的时候有4种写法,不过也只是殊途同归,都是用template属性对应的只有一个根标签的HTML代码. 1.全局组件 定义方式示例: Vue.component("hello-component",{ props:["message"], t

  • Vue路由切换的两种方式示例详解

    目录 Vue路由切换的两种方式 1. 标签切换 1.1 <a>标签切换 1.2 路径切换 1.3 path切换 1.4 name切换(推荐) 2. js切换 Vue路由切换的两种方式 1. 标签切换 1.1 <a>标签切换 语法:<a href=“# + 路由路径”>标签内容</a> 例子: 路由规则为: const router = new VueRouter({ //路由对象数组 routes: [{ path: '/login', component:

  • vue 2.0路由之路由嵌套示例详解

    前言 vue一个重要的方面就是路由,下面是自己写的一个路由的例子分享给大家供大家参考学习,下面来看看详细的介绍. 方法如下: 1.引入依赖库就不必再说 2.创建组件 两种写法 第一种:间接 <template id="home"> <div> <h1>Home</h1> <p>{{msg}}</p> </div> </template> var About = Vue.extend({ te

  • 单页面vue引入百度统计的使用方法示例详解

    前言 最近组长安排着做一个项目,h5的应用下载项目,想着做起来还是比较容易,可是看到提出的需求,我就有点懵逼了!需要对应用的下载进行统计!!!我当时就想着我前端怎么对页面点击按钮就行数据统计啊!我以前的项目也有对应用的下载量就行数据统计的,可是那些项目都是后台人员编写进行数据统计的.我当时就有点不知所措了.想着怎么进行统计,怎么搞定这个!百度得知,百度统计可以帮着解决这个问题,可是没有用过啊!硬着头皮,进入自己的踩坑之旅! 方法如下 1.首先还是先在百度统计注册账号,并且新增网站,设置网站域名.

随机推荐