20180909 解析JS Cookie的設置,獲取和檢索

来源:https://www.cnblogs.com/goakon/archive/2018/09/09/9613940.html
-Advertisement-
Play Games

引用: JavaScript Cookie - by runoob.com Cookie是儲存在電腦文本文件中的數據,用於保存訪問者的信息,並可以在下次打開頁面時引用。 頁面在設置/引用訪問者信息時,需要在JavaScript中對Cookie進行設置,獲取和檢索三個函數。 例如當訪問者首次訪問網頁時 ...


引用: JavaScript Cookie - by runoob.com

 

Cookie是儲存在電腦文本文件中的數據,用於保存訪問者的信息,並可以在下次打開頁面時引用。

頁面在設置/引用訪問者信息時,需要在JavaScript中對Cookie進行設置,獲取和檢索三個函數。

例如當訪問者首次訪問網頁時,網頁會對訪問者進行檢索(訪問者數據),無搜索信息時則頁面需要訪問者進行登錄(設置數據),當下次再次登錄時頁面會自動返回訪問者數據。

以下是我個人對使用Cookie保存用戶名案例的解讀:

 

1) 檢索Cookie

  頁面在被打開(onload)時調用"檢索函數"(checkCookie),如果Cookie中存在訪問者信息則調用"獲取函數"(getCookie)並返回用戶名,沒有則調用"設置函數"(setCookie)對用戶名進行設置。

 1 <body onload="checkCookie()">                              <!--當頁面被打開時調用checkCookie()-->
 2 
 3 <script>
 4     function checkCookie()
 5     {
 6         var user = getCookie("username");                  //調用getCookie()中的username,若不為空則返回值(用戶名)
 7         if (user!=""){
 8             alert("welcome back " + user);
 9         }     
10         else {
11             user = prompt("Please enter your name: ","");  //頁面彈出“請輸入用戶名”視窗,填寫user的值
12             if (user!="" && user!=null){                   //當輸入的用戶名不為空值時,將user作為屬性調入setCookie()中
13                 setCookie("username",user,30);
14             }
15         }
16     }
17 </script>
18 
19 </body>

首次登陸會彈出視窗:

 

 

2. 設置Cookie

  通過定義函數的參數setCookie(cname,cvalue,exdays)將訪問者信息的值保存到"Cookie名稱","Cookie值"和"Cookie過期時間"中.

  在上述檢索函數中,讓我輸入用戶名"Akon Wong"後,函數將"username","Akon Wong",30這三個值保存到setCookie(cname,cvalue,exdays)中

1 function setCookie(cname,cvalue,exdays)
2 {
3     var d = new Date();
4     d.setTime(d.getTime()+(exdays*24*60*60*10000));  //設置時間為當前時間+exdays的毫秒值(在checkCookie中,設置exdays的值為30)
5     var expires = "expires="+d.toUTCString();     //設置時間為字元串顯示   (toGMTString()已作廢)
6     document.cookie = cname+"="+cvalue+";"+expires;  //設置cookie的格式,通過checkCookie()後cookie的字元串結果為"username=Akon Wong;'到期日期'"
7 }

 

 

3. 獲取Cookie

  當下次再打開頁面後,頁面的checkCookie函數會在getCookie函數中獲取到Cookie儲存的用戶名"Akon Wong",並返回值。

 1 function getCookie(cname)
 2 {
 3     var name = cname + "=";                                                  //定義一個值為"username="的變數
 4     var ca      = document.cookie.split(';');                                //將cookie的字元串數據轉變為以逗號分隔的數組
 5     for (var i=0; i<ca.length; i++){                                         //通過for函數迴圈cookie的數據,
 6         var c = ca[i].trim();
 7         if (c.indexOf(name)==0){ return c.substring(name.length,c.length); } //當數據中包含關鍵字"name"時,返回"username="後面的字元(即用戶名)
 8     }
 9     return "";                                                               //若數據中沒有找到關鍵字,則返回空值,進入checkCookie的初始值設置
10 }

 再次登錄的歡迎詞:

 

 

完整函數:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>Set Cookies</title>
 6     </head>
 7     <body onload="checkCookie()">
 8         
 9         <p id="demo"></p>
10         
11         <script>
12             function setCookie(cname,cvalue,exdays)
13             {
14                 var d = new Date();
15                 d.setTime(d.getTime()+(exdays*24*60*60*1000));   //set up the due day of cookie
16                 var expires = "expires="+d.toUTCString();        
17                 document.cookie = cname+"="+cvalue+"; "+expires; 
18                 //the type of cookie: cookieName=value; due day
19             }
20             
21             function getCookie(cname)
22             {
23                 var name = cname + "=";
24                 var ca   = document.cookie.split(';'); //return 'the "username";username; time'
25                 for (var i=0; i<ca.length; i++){
26                     var c = ca[i].trim();
27                     if (c.indexOf(name)==0){ return c.substring(name.length,c.length); }
28                 }
29                 return "";
30             }
31             
32             function checkCookie()
33             {
34                 //run getCookie() to check if the username is exist.
35                 var user = getCookie("username");
36                 if (user!=""){
37                     alert("welcome back " + user);
38                 }
39                 else {
40                     user = prompt("Please enter your name: ","");   
41                     //prompt() can return the message that user input
42                     if (user!="" && user!=null){
43                         //run setCookie() to store the messages into cookie.
44                         setCookie("username",user,30);
45                     }
46                 }
47             }
48         </script>
49     </body>
50 </html>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、JavaScript特點 二、JavaScript三大部分:(ECMAScript、DOM、BOM) 三、JavaScript的基本語法 變數聲明 Js是一種弱數據類型的語言,任何類型的變數都用關鍵字Var來聲明。 賦值可以在聲明的的同時賦值,也可以在後面賦值。 這兩種方法是一樣的。 同時有一種 ...
  • 淺談CORS CORS全稱“跨站資源共用”(Cross Origin Resource Sharing),它允許瀏覽器剋服瀏覽器同源策略向跨域伺服器發出請求。 同源策略 概念 說到CORS,那麼就不得不提瀏覽器同源策略,所謂“同源”,是指伺服器URL的三個相同: 1.協議相同 2.功能變數名稱相同 3.埠 ...
  • 來自:https://blog.csdn.net/qq_35430000/article/details/79412664#commentBox github倉庫地址:https://github.com/byla678/vuexdemo.git 侵刪 ...
  • /* * pending:初始化成功 * fulfilled:成功 * rejected:失敗 * */ function Promise(executor) {// 執行器 this.status = 'pending'; this.value = undefined; this.reason =... ...
  • 序言: 剛結束公司的三個月試用期,意味著我即將正式步入社會成為廣大從事IT行業的一員。作為一個編程小白,無論從技術層面還是知識層面都是比較薄弱的,想要成為一個優秀的程式員不斷的學習與探索是不可避免的。我相信一切的付出與收穫是成正比的!Fighting! 這幾天在做公司的實際項目的時候,需要實現選中B ...
  • 前端火熱的框架層出不窮,作為碼農的我們,依舊需要去學習,去探索新的問題,學習新技術,其實就是為了寫一手好的,自認為是高質量的代碼。今天主要分享一下前端最火的框架vue,也是我比較喜歡的框架。 vue上手可以說是比較輕鬆而且簡單,如果你用過angular,react,你也會很喜歡vue。vue的核心思 ...
  • css實現單行文本溢出顯示 ... 直接上效果:相對於多行文本溢出做處理, 單行要簡單多,且更容易理解。 實現多行文本溢出顯示... 方法: 因使用了WebKit的CSS擴展屬性,該方法適用於WebKit瀏覽器及移動端; -webkit-line-clamp用來限制在一個塊元素顯示的文本的行數。 為 ...
  • 使用Canvas路徑畫圖需要註意方向,畫圖方向是順時針還是逆時針需要記住。下麵讓我們看看Canvas常見路徑方向。 arc 參數值 參數 | 描述 | x | 圓的中心的 x 坐標。 y | 圓的中心的 y 坐標。 r | 圓的半徑。 sAngle | 起始角,以弧度計。(弧的圓形的三點鐘位置是 0 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...