VUE使用localstorage和sessionstorage實(shí)現(xiàn)登錄示例詳解
正文
今天這篇日志記錄下做VUE登錄的血淚史(VUE2)。
當(dāng)時(shí)也不知道是咋想的,就認(rèn)為php給VUE提供接口,可能session就不起作用了(現(xiàn)在的登錄是用SESSION做的)。
可是登錄需要做呀,用什么存儲(chǔ)登錄的用戶信息呢。最開(kāi)始我還真想過(guò)用COOKIE,但是安全性得不到保證,因?yàn)樵诿看蜨TTP請(qǐng)求的時(shí)候,都會(huì)把cookie中存儲(chǔ)的數(shù)據(jù)攜帶在請(qǐng)求中。其實(shí)localstroage也不見(jiàn)得安全到那里去,可是總覺(jué)得新東西能好一點(diǎn)。
localstroage就是一個(gè)加強(qiáng)版的COOKIE。
localstroage與sessionstroage是HTML5的新屬性。使用的相對(duì)方便。瀏覽器支持也做的很好。
這里著重說(shuō)一下IE,官方給的說(shuō)法是IE8及以上的瀏覽器支持。
但是網(wǎng)上大多數(shù)的說(shuō)法是IE8本身是不支持的,只有到了IE9才支持。
這個(gè)我沒(méi)試,IE瀏覽器我早早的就放棄了。有興趣,可以試一試。
說(shuō)到他們二者,就不得不和Cookie對(duì)比一下了。
三者的異同
| 特性 | Cookie | localStorage | sessionStorage |
|---|---|---|---|
| 數(shù)據(jù)的生命期 | 一般由服務(wù)器生成,可設(shè)置失效時(shí)間。如果在瀏覽器端生成Cookie,默認(rèn)是關(guān)閉瀏覽器后失效 | 除非被清除,否則永久保存,可變相設(shè)置失效時(shí)間。 | 僅在當(dāng)前會(huì)話下有效,關(guān)閉頁(yè)面或?yàn)g覽器后被清除 |
| 存放數(shù)據(jù)大小 | 4K左右 | 一般為5MB | |
| 與服務(wù)器端通信 | 每次都會(huì)攜帶在HTTP頭中,如果使用cookie保存過(guò)多數(shù)據(jù)會(huì)帶來(lái)性能問(wèn)題 | 僅在客戶端(即瀏覽器)中保存,不參與和服務(wù)器的通信 | |
| 易用性 | 需要程序員自己封裝,源生的Cookie接口不友好 | 源生接口可以接受,亦可再次封裝來(lái)對(duì)Object和Array有更好的支持 |
localStorage和sessionStorage操作
localStorage和sessionStorage操作方法都一樣,我覺(jué)得,他倆是一個(gè)玩意。就是‘生命周期不一樣’。
setItem存儲(chǔ)value
用途:將value存儲(chǔ)到key字段
sessionStorage.setItem("key", "value");
localStorage.setItem("aaa", "111");
localStorage.name = "xuanyuan"
getItem獲取value
用途:獲取指定key本地存儲(chǔ)的值
var value = sessionStorage.getItem("key");
var site = localStorage.getItem("asd");
removeItem刪除key
用途:刪除指定key本地存儲(chǔ)的值
sessionStorage.removeItem("key");
localStorage.removeItem("asd");
clear清除所有的key/value
用途:清除所有的key/value
sessionStorage.clear(); localStorage.clear();
其他操作方法:點(diǎn) ‘.’ 操作和[ ]
web Storage不但可以用自身的setItem,getItem等方便存取,也可以像普通對(duì)象一樣用點(diǎn)(.)操作符,及[]的方式進(jìn)行數(shù)據(jù)存儲(chǔ),像如下的代碼:
var storage = window.localStorage; storage.key1 = "hello"; storage["key2"] = "world"; console.log(storage.key1); console.log(storage["key2"]);
localStorage和sessionStorage的key和length屬性實(shí)現(xiàn)遍歷
sessionStorage和localStorage提供的key()和length可以方便的實(shí)現(xiàn)存儲(chǔ)的數(shù)據(jù)遍歷,例如下面的代碼:
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);
}
登錄實(shí)例:
<template>
<div class="bigdiv">
<div class="twodiv">
<div >
<p><h2>登錄</h2></p>
</div>
<div>
<Input v-model="username" placeholder="賬號(hào)" 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"; //處理數(shù)據(jù) 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對(duì)象附到一個(gè)不可更改的變量中~
axios({
method: "post",
url: "你的url",
data: {username: this.username,password:this.password}
})
.then(function(response) {
checkRule(response,self);//檢查是否有權(quán)限
if(response.data.status == 1){
// 所有的瀏覽器中都會(huì)把localStorage的值類型限定為string類型,這個(gè)在對(duì)我們?nèi)粘1容^常見(jiàn)的JSON對(duì)象類型需要一些轉(zhuǎn)換
// 先存localStorage,再提示操作成功,然后跳路由
// JSON.stringify:將對(duì)象轉(zhuǎn)成字符串
// JSON.parse():將字符串裝換成對(duì)象
let toll = JSON.stringify(response.data.toll);//將當(dāng)前信息變成json字符串
localStorage.toll = toll;//存儲(chǔ)用戶信息
let nowtime = new Date().getTime();
localStorage.logintime = nowtime;//存儲(chǔ)登陸時(shí)間,判斷登錄是否過(guò)期
self.$Message.success('登陸成功');
self.$router.push({
path:'/', //這是路由名稱
})
}else{
alert("用戶名或密碼錯(cuò)誤");
}
})
.catch(function(response) {
// alert("請(qǐng)求失敗");
});
},
}
}
</script>
Router.js
// 全局路由守衛(wèi)
router.beforeEach((to, from, next) => {//在路由跳轉(zhuǎn)之前做的事
var userinfo = '';
// 這個(gè)是使用localstronge存儲(chǔ)方式存儲(chǔ)的方法
let nowtime = new Date().getTime();//獲取當(dāng)前時(shí)間戳 毫秒
let sessiontime = nowtime - localStorage.logintime//當(dāng)前時(shí)間 - 登錄時(shí)間
console.log(sessiontime)
// 數(shù)據(jù)保存時(shí)間只有5個(gè)小時(shí),超過(guò)5個(gè)小時(shí),清除
if (sessiontime > 18000000){
localStorage.clear();
}
// 這是取值
let userinfo = localStorage.userinfo;
}
以上示例是我博客后臺(tái)管理系統(tǒng)登錄所使用的登錄存儲(chǔ)登錄數(shù)據(jù)的方法,更多關(guān)于VUE實(shí)現(xiàn)登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 在Vue3中使用localStorage保存數(shù)據(jù)的流程步驟
- 教你在Vue3中使用useStorage輕松實(shí)現(xiàn)localStorage功能
- vue如何使用cookie、localStorage和sessionStorage進(jìn)行儲(chǔ)存數(shù)據(jù)
- vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端
- Vue使用localStorage存儲(chǔ)數(shù)據(jù)的方法
- Vue項(xiàng)目使用localStorage+Vuex保存用戶登錄信息
- 詳解vue中l(wèi)ocalStorage的使用方法
- 詳解Vue中l(wèi)ocalstorage和sessionstorage的使用
- vue中的localStorage使用方法詳解
相關(guān)文章
vuejs+element-ui+laravel5.4上傳文件的示例代碼
本篇文章主要介紹了vuejs+element-ui+laravel5.4上傳文件的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
關(guān)于Elementui中toggleRowSelection()方法實(shí)現(xiàn)分頁(yè)切換時(shí)記錄之前選中的狀態(tài)
這篇文章主要介紹了關(guān)于Elementui中toggleRowSelection()方法實(shí)現(xiàn)分頁(yè)切換時(shí)記錄之前選中的狀態(tài),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vuex結(jié)合session存儲(chǔ)數(shù)據(jù)解決頁(yè)面刷新數(shù)據(jù)丟失問(wèn)題
在項(xiàng)目中表單篩選項(xiàng)里,選擇完之后刷新頁(yè)面數(shù)據(jù)就變了,沒(méi)有保留在自己選擇的選項(xiàng)上。本文使用session存儲(chǔ)數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09
詳解vue-flickity的fullScreen功能實(shí)現(xiàn)
這篇文章主要介紹了詳解vue-flickity的fullScreen功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
element?UI中el-dialog實(shí)現(xiàn)拖拽功能示例代碼
我們?cè)陂_(kāi)發(fā)中常會(huì)遇見(jiàn)拖拽的功能,下面這篇文章主要給大家介紹了關(guān)于element?UI中el-dialog實(shí)現(xiàn)拖拽功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

