首頁 web前端 js教程 Express Session實作登入驗證功能(附程式碼)

Express Session實作登入驗證功能(附程式碼)

Apr 18, 2018 am 11:08 AM
express session 驗證

這次帶給大家Express Session實作登入驗證功能(附程式碼),Express Session實作登入驗證功能的注意事項有哪些,以下就是實戰案例,一起來看一下。

對於使用Express和Session實作登入驗證也是很多人在探求的,這次文章就給大家簡單的介紹下怎麼使用Express和Session實現登入驗證,具體實作程式碼是什麼?一起來了解下。

1. 寫在前面

當我們登入了一個網站,在沒有登出登入的情況下,我們關閉了這個網站 ,過一段時間,再次打開這個網站,依然還會是登入狀態。這是因為,當我們登入了一個網站,伺服器會保存我們的登入狀態,直到我們退出登錄,或儲存的登入狀態過期。那伺服器是透過什麼儲存我們的登入狀態的呢?答案就是 Session ,服務透過 Session 能夠記錄每個客戶端連線的狀態。關於 Session 的原理,在這就不多說了,本文主要介紹在 Express 框架中,如何使用 Session 來實現用戶登入身份驗證。

2. 環境配置

在Node 環境中, 並沒有整合 Express 和 Session 的函式庫,因此需要進行安裝,先進入建立一個專案目錄,然後在專案根目錄中,利用下方指令安裝四個模組。

1) Express

這個模組能夠讓我們快速的建構一個 Web 開發框架。

2) body-parser

這個模組是 Express 模組的中間件,方便我們解析瀏覽器傳送來的 body 資料。

3) express-session

# 這個模組也是 Express 模組中間件,方便我們處理客戶端的 session。

4) ejs

該模組是一個渲染引擎。方便我們將後台變數資料綁定到前台頁面上。

安裝如下:

npm install express --save
npm install body-parser --save
npm install express-session --save
npm install ejs --save
登入後複製

3. 登入與驗證

Session 能夠標記客戶端在伺服器上的狀態。利用這一點,我們能夠實現客戶端的登入驗證。 Session 登入驗證的流程大致為:客戶端若在未登入的狀態下請求主頁,那麼伺服器將該請求重定向到登入頁面;用戶端在登入後,伺服器需要記錄保存該用戶端的登入狀態,並給予一個活動期限,這樣下次伺服器請求首頁的時候,就能夠判斷該客戶端的登入狀態,若登入狀態有效,直接返回客戶端所需的頁面,否則重新導向至登入頁面。

對於 Session 的過期時間,如果沒有設定 Session 的過期時間,伺服器會根據自己配置中預設有效期,將長期不與伺服器互動的 Session 進行刪除。

下面貼出實例程式碼,介面比較簡單,伺服器後台程式碼註解寫的很清楚,因此就不再進行說明了。

專案的目錄結構如下:

登入頁面(login.html) 程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
  </style>
</head>
<body>
  <form action="/login" method="POST">
    用户名: <input type="text" name="username"/> <br>
    密码: <input type="password" name="pwd"/>
    <input type="submit" value="Submit"/>
  </form>
</body>
</html>
登入後複製

首頁(home.html)程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <p>用户名:<span><%= username %> </span> <a href="/logout" rel="external nofollow" >退出登录</a></p>
</body>
</html>
登入後複製

伺服器(app.js)程式碼如下:

/**
 * Created by tjm on 9/7/2017.
 */
var express = require('express');
var app = express();
var session = require('express-session');
var bodyparser = require('body-parser');
// 下面三行设置渲染的引擎模板
app.set('views', dirname); //设置模板的目录
app.set('view engine', 'html'); // 设置解析模板文件类型:这里为html文件
app.engine('html', require('ejs').express); // 使用ejs引擎解析html文件中ejs语法
app.use(bodyparser.json()); // 使用bodyparder中间件,
app.use(bodyparser.urlencoded({ extended: true }));
// 使用 session 中间件
app.use(session({
  secret : 'secret', // 对session id 相关的cookie 进行签名
  resave : true,
  saveUninitialized: false, // 是否保存未初始化的会话
  cookie : {
    maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
  },
}));
// 获取登录页面
app.get('/login', function(req, res){
  res.sendFile(dirname + '/login.html')
});
// 用户登录
app.post('/login', function(req, res){
  if(req.body.username == 'admin' && req.body.pwd == 'admin123'){
    req.session.userName = req.body.username; // 登录成功,设置 session
    res.redirect('/');
  }
  else{
    res.json({ret_code : 1, ret_msg : '账号或密码错误'});// 若登录失败,重定向到登录页面
  }
});
// 获取主页
app.get('/', function (req, res) {
  if(req.session.userName){ //判断session 状态,如果有效,则返回主页,否则转到登录页面
    res.render('home',{username : req.session.userName});
  }else{
    res.redirect('login');
  }
})
// 退出
app.get('/logout', function (req, res) {
  req.session.userName = null; // 删除session
  res.redirect('login');
});
app.listen(8000,function () {
  console.log('http://127.0.0.1:8000')
})
登入後複製

到此,session 實作登入驗證就完成。上面的範例 session 是保存在服務記憶體中,當然還可以儲存在檔案或資料庫中,只需要配置 session 中間件即可。

app.use(session({
  secret: 'secretkey',
  store: new MongoStore({
    db: 'sessiondb'
  })
}));
登入後複製

我相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

node.js實作讀取和寫入同步功能

怎麼比對兩個字串中的相同資料

#

以上是Express Session實作登入驗證功能(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PDF中驗證簽名 如何在PDF中驗證簽名 Feb 18, 2024 pm 05:33 PM

我們通常會接收到政府或其他機構發送的PDF文件,有些文件有數位簽章。驗證簽名後,我們會看到SignatureValid訊息和一個綠色勾號。如果簽章未驗證,會顯示有效性未知。驗證簽名很重要,以下看看如何在PDF中進行驗證。如何在PDF中驗證簽名驗證PDF格式的簽名使其更可信,文件更容易被接受。您可以透過以下方式驗證PDF文件中的簽名。在AdobeReader中開啟PDF右鍵點選簽名,然後選擇顯示簽名屬性點選顯示簽署者憑證按鈕從「信任」標籤將簽名新增至「受信任的憑證」清單中點選驗證簽名以完成驗證讓

微信好友輔助驗證解封的詳細方法 微信好友輔助驗證解封的詳細方法 Mar 25, 2024 pm 01:26 PM

1.打開微信進入後,點選搜尋圖標,輸入微信團隊,點選下方的服務進入。 2、進入後,點選左下方的自助工具的選項。 3、點選後,在上方的選項內,點選解封/申訴輔助驗證的選項。

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

PHP 8 新功能:增加了驗證和簽名 PHP 8 新功能:增加了驗證和簽名 Mar 27, 2024 am 08:21 AM

PHP8是PHP的最新版本,為程式設計師帶來了更多的便利性和功能。這個版本特別關注安全性和效能,其中一個值得注意的新功能是增加了驗證和簽章功能。在本文中,我們將深入了解這些新的功能及其用途。驗證和簽名是電腦科學中非常重要的安全概念。它們通常用於確保傳輸的數據是完整和真實的。在處理線上交易和敏感資訊時,驗證和簽名變得尤為重要,因為如果有人能夠篡改數據,可能會對

如何使用正規表示式驗證IFSC代碼? 如何使用正規表示式驗證IFSC代碼? Aug 26, 2023 pm 10:17 PM

印度金融系統代碼是縮寫。參與電子資金轉移系統的印度銀行分行由一個特殊的11位元字元代碼進行識別。印度儲備銀行在網路交易中使用此代碼在銀行之間轉移資金。 IFSC程式碼分為兩個部分。銀行由前四個字元進行標識,而分行由最後六個字元進行標識。 NEFT(全國電子資金轉移)、RTGS(即時毛額結算)和IMPS(即時支付服務)是一些需要IFSC代碼的電子交易。 Method使用正規表示式驗證IFSC程式碼的一些常見方法有:檢查長度是否正確。檢查前四個字元。 Checkthefifthcharacter.Che

如何在Laravel中驗證路由參數? 如何在Laravel中驗證路由參數? Sep 01, 2023 pm 02:41 PM

在Laravel中,路由在paths/資料夾中定義。路由在web.php檔案中定義。該檔案是在laravel安裝完成後建立的。 Laravel路由接受URI和閉包函數,如下所示-useIlluminate\Support\Facades\Route;Route::get('/student',function(){return'HelloStudent';});在web/routes.php中定義的路由被分配到web中間件組中,並且它們具有會話狀態和CSRF保護。您也可以在路由中呼叫控制器如下所示

JavaScript和PHP的cookie之間有哪些差異? JavaScript和PHP的cookie之間有哪些差異? Sep 02, 2023 pm 12:29 PM

JavaScriptCookie使用JavaScriptcookie是記住和追蹤偏好、購買、佣金和其他資訊的最有效方法。更好的訪客體驗或網站統計所需的資訊。 PHPCookieCookie是儲存在客戶端電腦上的文字檔案並保留它們用於追蹤目的。 PHP透明地支援HTTPcookie。 JavaScriptcookie如何運作?您的伺服器將一些資料傳送到訪客的瀏覽器cookie的形式。瀏覽器可以接受cookie。如果存在,它將作為純文字記錄儲存在訪客的硬碟上。現在,當訪客到達網站上的另一個頁面時

See all articles