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中文網其它相關文章!
推薦閱讀:
#以上是Express Session實作登入驗證功能(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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