最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Express + Session 實現(xiàn)登錄驗證功能

 更新時間:2017年09月08日 16:38:48   作者:msay  
本文主要介紹在 Express 框架中,如何使用 Session 來實現(xiàn)用戶登錄身份驗證。對express session實現(xiàn)登錄驗證相關知識,感興趣的朋友一起看看吧

1. 寫在前面

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

2. 環(huán)境配置

在Node 環(huán)境中, 并沒有集成 Express 和 Session 的庫,因此需要進行安裝,首先進入建立一個項目目錄,然后在項目根目錄中,利用下面命令安裝四個模塊。

1) Express

該模塊能夠讓我們快速的搭建一個 Web 開發(fā)框架。

2) body-parser

該模塊是 Express 模塊的中間件,方便我們解析瀏覽器發(fā)送來的 body 數(shù)據(jù)。

3) express-session

該模塊也是 Express 模塊中間件,方便我們處理客戶端的 session。

4) ejs

該模塊是一個渲染引擎。 方便我們將后臺變量數(shù)據(jù)綁定到前臺頁面上。

安裝如下:

npm install express --save
npm install body-parser --save
npm install express-session --save
npm install ejs --save

3. 登錄與驗證

Session 能夠標記客戶端在服務器上的狀態(tài)。利用這一點,我們能夠?qū)崿F(xiàn)客戶端的登錄驗證。Session 登錄驗證的流程大致為:客戶端若在未登錄的狀態(tài)下請求主頁,那么服務器將該請求重定向到登錄頁面;客戶端在登錄后,服務器需要記錄保存該客戶端的登錄狀態(tài),并給予一個活動期限,這樣下一次服務器請求主頁的時候,就能夠判斷該客戶端的登錄狀態(tài),若登錄狀態(tài)有效,直接返回客戶端需要的頁面,否則重定向到登錄頁面。

對于 Session 的過期時間,如果沒有設置 Session 的過期時間,服務器會根據(jù)自己配置中默認有效期,將長期不與服務器交互的 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>
  <div>用戶名:<span><%= username %> </span> <a href="/logout" rel="external nofollow" >退出登錄</a></div>
</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 狀態(tài),如果有效,則返回主頁,否則轉(zhuǎn)到登錄頁面
    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 實現(xiàn)登錄驗證就完成。上面的例子 session 是保存在服務內(nèi)存中,當然還可以保存在文件或數(shù)據(jù)庫中,只需要配置 session 中間件即可。

app.use(session({
  secret: 'secretkey',
  store: new MongoStore({
    db: 'sessiondb'
  })
}));

上面的代碼則是將 session 保存到 MongoDB 數(shù)據(jù)庫,當然 Session 的配置還有一些,具體參考:

https://www.npmjs.com/package/express-session

總結

以上所述是小編給大家介紹的Express + Session 實現(xiàn)登錄驗證功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 修改node.js默認的npm安裝目錄實例

    修改node.js默認的npm安裝目錄實例

    今天小編就為大家分享一篇修改node.js默認的npm安裝目錄實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node檢測端口可用性的實踐示例

    node檢測端口可用性的實踐示例

    本文主要介紹了node檢測端口可用性的實踐示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Node.js zlib模塊之屬性、方法及使用示例詳解

    Node.js zlib模塊之屬性、方法及使用示例詳解

    zlib模塊是Node.js中用于數(shù)據(jù)壓縮和解壓縮的強大工具,它提供了多種壓縮算法和靈活的使用方式,包括Deflate、Gzip等,廣泛用于網(wǎng)絡傳輸和文件存儲中以減少數(shù)據(jù)大小,提高性能,本文給大家介紹Node.js zlib模塊屬性、方法及使用示例,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Node.js靜態(tài)文件服務器改進版

    Node.js靜態(tài)文件服務器改進版

    這篇文章主要介紹了Node.js靜態(tài)文件服務器改進版的相關資料,需要的朋友可以參考下
    2016-01-01
  • Node.js入門筆記?之a(chǎn)sync模塊

    Node.js入門筆記?之a(chǎn)sync模塊

    這篇文章主要介紹了Node.js入門筆記?之a(chǎn)sync模塊,async是一個異步處理模塊,主要有三個方式:串行無關聯(lián)、并行無關聯(lián)?、串行有關聯(lián),文章圍繞主題展開更多的相關內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • node命令以及切換node版本詳細步驟

    node命令以及切換node版本詳細步驟

    這篇文章主要給大家介紹了關于node命令以及切換node版本的相關資料,在使用node命令切換node版本時可以使用nvm(Node?Version?Manager)工具來管理不同版本的node,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • node puppeteer(headless chrome)實現(xiàn)網(wǎng)站登錄

    node puppeteer(headless chrome)實現(xiàn)網(wǎng)站登錄

    這篇文章主要介紹了node puppeteer(headless chrome)實現(xiàn)網(wǎng)站登錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js中Bootstrap-table的兩種分頁的實現(xiàn)方法

    Node.js中Bootstrap-table的兩種分頁的實現(xiàn)方法

    這篇文章主要介紹了Node.js中Bootstrap-table的兩種分頁的使用方法,需要的朋友可以參考下
    2017-09-09
  • 詳解nodejs 開發(fā)企業(yè)微信第三方應用入門教程

    詳解nodejs 開發(fā)企業(yè)微信第三方應用入門教程

    這篇文章主要介紹了詳解nodejs 開發(fā)企業(yè)微信第三方應用入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Node.js連接postgreSQL并進行數(shù)據(jù)操作

    Node.js連接postgreSQL并進行數(shù)據(jù)操作

    自從MySQL被Oracle收購以后,PostgreSQL逐漸成為開源關系型數(shù)據(jù)庫的首選。這篇文章就給大家介紹了關于Node.js如何連接postgreSQL數(shù)據(jù)庫,并進行數(shù)據(jù)操作的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12

最新評論

墨竹工卡县| 敖汉旗| 巨鹿县| 上高县| 姜堰市| 阿克| 石屏县| 黄梅县| 朝阳县| 渭南市| 祁东县| 仁怀市| 新昌县| 濮阳县| 青海省| 万盛区| 蒙山县| 阿勒泰市| 和平县| 永平县| 麻栗坡县| 扎赉特旗| 江源县| 长岛县| 新干县| 胶南市| 高密市| 东宁县| 富裕县| 徐汇区| 佛坪县| 通山县| 宿迁市| 灵武市| 柘城县| 房产| 平远县| 东光县| 昌黎县| 凌云县| 科技|