成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于前端設(shè)置過期時間

UnixAgain / 2468人閱讀

摘要:前言開發(fā)過程少不了會遇到給某個狀態(tài)設(shè)置過期時間的需求例如進(jìn)入頁面有個默認(rèn)彈窗用戶關(guān)閉之后在小時之內(nèi)再次打開不能再彈面對這樣需求我們首先想到的是需要設(shè)置一個變量去控制彈窗的隱藏因?yàn)槟J(rèn)是開啟的如何去保證這個變量的有效時間呢這里就涉及到數(shù)據(jù)的持

前言

開發(fā)過程少不了會遇到給某個狀態(tài)設(shè)置過期時間的需求,例如:進(jìn)入頁面有個默認(rèn)彈窗,用戶關(guān)閉之后在 1 小時之內(nèi)再次打開不能再彈; 面對這樣需求我們首先想到的是需要設(shè)置一個變量去控制彈窗的隱藏(因?yàn)槟J(rèn)是開啟的), 如何去保證這個變量的有效時間呢? 這里就涉及到數(shù)據(jù)的持久化,前端數(shù)據(jù)持久化可以理解為客戶端數(shù)據(jù)的持久化, 就是數(shù)據(jù)存儲在本地; 我們馬上就想到了 cookie,localStorage,sessionStorage這些屬性了...
下面先來解決這個需求, 稍后繼續(xù)再說一下他們區(qū)別

通過cookie設(shè)置過期時間

cookie是以鍵值對的形式保存在瀏覽器本地的一段文本字符串(前提是瀏覽器未禁用cookie),各個cookie字段之間一般是以“;”分隔,即"key=value;xxx=yyy"的格式...

js操作cookie的方式是通過 window.cookie來進(jìn)行讀寫的;其中expires字段是: 設(shè)置cookie的生存時間,當(dāng)設(shè)置了一個時間點(diǎn)后,每次訪問瀏覽器會用當(dāng)前時間和cookie的expries做比對,如果過期cookie則會被刪除,這樣我們可以通過判斷是否存在 cookie 來關(guān)閉彈窗提示了;

代碼展示
// 設(shè)置 cookie
const setCookie = (name, value, time) => {
  let currentTime = new Date().getTime();
  let expireTime = new Date(currentTime + time);
  document.cookie = name + "="+ value + ";expires=" + expireTime.toGMTString();
}
// 獲取 cookie
const getCookie = name => {
    let strCookie = document.cookie; 
    let arrCookie = strcookie.split(";"); 
    // 遍歷匹配
    for (let i = 0; i < arrCookie.length; i++) {
        let temp = arrCookie[i].split("=");
        if (temp[0] === name) {
            return temp[1];
        }
    }
    return "";
}
// 進(jìn)入頁面時就判斷是否存在設(shè)定cookie值, 沒有就默認(rèn)顯示;如果有就不顯示彈窗; 
// 當(dāng)我們點(diǎn)擊關(guān)閉時設(shè)置 cookie 的過期時間, 這里的業(yè)務(wù)代碼就不寫了
通過 localStorage 來設(shè)置

思路基本差不多, 就是在設(shè)置的時候額外添加一個時間戳,然后取出來與當(dāng)前時間做比較, 下面就直接上代碼了.

代碼展示
// 判斷數(shù)據(jù)類型
dataType = data => {
    return Object.prototype.toString.call(data).slice(8, -1);
};

// 封裝我的localStorge
const myLocalStorage = {
    /**
     * @desc 設(shè)置緩存 + 過期時間
     * @param {String} item
     * @param {any} value
     * @param {Number} expire
     */
    set(item, value, expire) {
        value = dataType(value) === "Object" ? JSON.stringify(value) : value;
        if (expire) {
            value += "?expire=" + (this.getTime() + expire);
        }
        window.localStorage.setItem(item, value);
    },
    // 獲取值
    get(item) {
        let data = window.localStorage.getItem(item) || "";
        let expireIndex = data.indexOf("?expire=");
        let expireTime = data.substring(expireIndex);
        let value = data.substring(0, expireIndex > 0 ? expireIndex : data.length);

        if (expireTime) {
            expireTime = expireTime.substring(8);
            if (expireTime < this.getTime()) {
                // 過期...
                this.clear(item);
                return "";
            } else {
                // 未過期...
                return this.getValue(value);
            }
        }
    },
    // 清除
    clear(item) {
        window.localStorage.removeItem(item);
    },
    // 獲取當(dāng)前時間
    getTime() {
        return new Date().getTime();
    },
    // 獲取數(shù)據(jù)
    getValue(value) {
        // 這里還不夠嚴(yán)謹(jǐn), 判斷json為數(shù)組和對象
        if (value.includes("{") || value.includes("[")) {
            return JSON.parse(value);
        } else {
            return value;
        }
    },
};

// 業(yè)務(wù)代碼
// ==================================
import { myLocalStorage } from "@/common/js/tool";

export default {
  data() {
    return {
      tips: ""
    };
  },
  created() {
    this.getTip();
  },
  methods: {
    closeTip() {
      this.tips = false;
      this.setTip();
    },
    setTip() {
      myLocalStorage.set("showTip", "24 hours later", 24*60*60*1000);
    },
    getTip() {
      this.tips = myLocalStorage.get("showTip") || "";
    }
  },
  computed: {
    isShowTip() {
      return this.tips === "";
    }
  }
};
說說localStorage,cookie 和 sessionStorage

其實(shí)寫這篇文章的目的主要想梳理一下自己對這幾個特性的理解,分別從作用域,存儲大小,生命周期,注意事項來說

window.cookie
1.一般由服務(wù)端生成,保存在瀏覽器端的一段字符串,參與服務(wù)端通信,會攜帶在請求頭中;
  服務(wù)端可以通過request修改,客戶端也可以通過window.cookie 來修改
2.作用域范圍
    遵循同源策略; 注意 domain 參數(shù)的設(shè)置,頂級域名下二級,三級域名是可以實(shí)現(xiàn)cookie共享的
3.大小
    一般為 4K左右, 瀏覽器有個數(shù)限制 20
4.生命周期
    設(shè)置 expires ;根據(jù)具體需求時間設(shè)置
window.localStorage
1.存儲在瀏覽器本地的一段字符串,不參與和服務(wù)端的通信
2.作用域范圍
    同樣遵循同源策略,同源站點(diǎn)可以在同一瀏覽器下進(jìn)行讀寫操作
3.大小
    5M左右
4.生命周期
    一直存在,除非人為清除
window.sessionStorage
1.也是存儲在瀏覽器本地的一段字符串,不參與和服務(wù)端的通信
2.作用域范圍
    同樣遵循同源策略,同源站點(diǎn),同一tab標(biāo)簽頁可以在同一瀏覽器下進(jìn)行讀寫操作;
    即:只有同一瀏覽器、同一窗口的同源頁面才能共享數(shù)據(jù);如果新開一個 tab 標(biāo)簽是不行的
3.大小
    5M左右
4.生命周期
    與標(biāo)簽頁同在; tab 標(biāo)簽關(guān)了,則數(shù)據(jù)清除

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105410.html

相關(guān)文章

  • 關(guān)于Jwt的一些思考

    摘要:而且這樣做的話,會存在多個令牌同時有效,可能會引起一些安全問題。這種做法也是很多人采用的一種。對于續(xù)期的話,個人覺得第二種方案是比較好的一種方案。而退出的話,如果不考慮泄露的問題,那么第一種方案是比較好的一種方案。這些都是自己對的一些理解。 在使用jwt的過程中發(fā)現(xiàn)了兩個問題續(xù)期和退出的問題。 續(xù)期 因?yàn)閖wt的token在簽發(fā)之后是有過期時間的,所以就存在管理這個過期時間的問題。我看...

    nanfeiyan 評論0 收藏0
  • Cookie、Session和LocalStorage

    摘要:通常,它用于告知服務(wù)端兩個請求是否來自同一瀏覽器,如保持用戶的登錄狀態(tài)。使基于無狀態(tài)的協(xié)議記錄穩(wěn)定的狀態(tài)信息成為了可能。標(biāo)記為的只應(yīng)通過被協(xié)議加密過的請求發(fā)送給服務(wù)端。 前記 前面我已經(jīng)寫了一篇關(guān)于Cookie的文章,但是那時候我其實(shí)理解的并不是很深刻,會有些搞不懂的地方,今天我就再寫一次,博客也是我的學(xué)習(xí)筆記 Cookie Cookie是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù)...

    DesGemini 評論0 收藏0
  • 前端基礎(chǔ)進(jìn)階】瀏覽器的緩存機(jī)制

    摘要:接下來的內(nèi)容中我們將通過緩存位置緩存策略以及實(shí)際場景應(yīng)用緩存策略來探討瀏覽器緩存機(jī)制。是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。在所有瀏覽器緩存中,覆蓋面基本是最大的。 一、前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了。一個優(yōu)秀的緩存策略可以縮短網(wǎng)頁請求資源的距離,減少延遲,并且由于緩存文件可以重復(fù)利用,還可以減少帶寬,降低網(wǎng)絡(luò)負(fù)荷。對于一個數(shù)據(jù)請求來說,可以分為...

    Mertens 評論0 收藏0
  • 關(guān)于redis的幾件小事(四)redis的過期策略以及內(nèi)存淘汰機(jī)制

    摘要:的過期策略是什么樣的采用了定期刪除惰性刪除的過期策略。定期刪除原理定期刪除指的是默認(rèn)每隔就隨機(jī)抽取一些設(shè)置了過期時間的,檢測這些是否過期,如果過期了就將其刪掉。所有只會抽取一部分而不會全部檢查。 1.數(shù)據(jù)為什么會過期? 首先,要明白redis是用來做數(shù)據(jù)緩存的,不是用來做數(shù)據(jù)存儲的(當(dāng)然也可以當(dāng)數(shù)據(jù)庫用),所以數(shù)據(jù)時候過期的,過期的數(shù)據(jù)就不見了,過期主要有兩種情況, ①在設(shè)置緩存數(shù)據(jù)時制定了...

    AbnerMing 評論0 收藏0
  • 如何在SpringBoot中集成JWT(JSON Web Token)鑒權(quán)

    摘要:在使用非對稱加密算法進(jìn)行簽名的時候,還可以用于驗(yàn)證的發(fā)件人是否與中申明的發(fā)件人是同一個人。如果沒有用非對稱加密算法的話,把復(fù)制之后直接可以去官網(wǎng)在線解析。 這篇博客主要是簡單介紹了一下什么是JWT,以及如何在Spring Boot項目中使用JWT(JSON Web Token)。 1.關(guān)于JWT 1.1 什么是JWT 老生常談的開頭,我們要用這樣一種工具,首先得知道以下幾個問題。 這...

    yeyan1996 評論0 收藏0

發(fā)表評論

0條評論

UnixAgain

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<