• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:30:45
    文檔

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

    Express + Session 實(shí)現(xiàn)登錄驗(yàn)證功能:1. 寫在前面 當(dāng)我們登錄了一個(gè)網(wǎng)站,在沒有退出登錄的情況下,我們關(guān)閉了這個(gè)網(wǎng)站 ,過一段時(shí)間,再次打開這個(gè)網(wǎng)站,依然還會(huì)是登錄狀態(tài)。這是因?yàn)椋?dāng)我們登錄了一個(gè)網(wǎng)站,服務(wù)器會(huì)保存我們的登錄狀態(tài),直到我們退出登錄,或者保存的登錄狀態(tài)過期。那服務(wù)器
    推薦度:
    導(dǎo)讀Express + Session 實(shí)現(xiàn)登錄驗(yàn)證功能:1. 寫在前面 當(dāng)我們登錄了一個(gè)網(wǎng)站,在沒有退出登錄的情況下,我們關(guān)閉了這個(gè)網(wǎng)站 ,過一段時(shí)間,再次打開這個(gè)網(wǎng)站,依然還會(huì)是登錄狀態(tài)。這是因?yàn)椋?dāng)我們登錄了一個(gè)網(wǎng)站,服務(wù)器會(huì)保存我們的登錄狀態(tài),直到我們退出登錄,或者保存的登錄狀態(tài)過期。那服務(wù)器

    1. 寫在前面

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

    2. 環(huán)境配置

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

    1) Express

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

    2) body-parser

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

    3) express-session

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

    4) ejs

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

    安裝如下:

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

    3. 登錄與驗(yàn)證

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

    對(duì)于 Session 的過期時(shí)間,如果沒有設(shè)置 Session 的過期時(shí)間,服務(wù)器會(huì)根據(jù)自己配置中默認(rèn)有效期,將長(zhǎng)期不與服務(wù)器交互的 Session 進(jìn)行刪除。

    下面貼出實(shí)例代碼,界面比較簡(jiǎn)單,服務(wù)器后臺(tái)代碼注釋寫的很清楚,因此就不再進(jìn)行說明了。

    項(xiàng)目的目錄結(jié)構(gòu)如下:

    登錄頁(yè)面(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>

    主頁(yè)(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>

    服務(wù)器(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');
    // 下面三行設(shè)置渲染的引擎模板
    app.set('views', __dirname); //設(shè)置模板的目錄
    app.set('view engine', 'html'); // 設(shè)置解析模板文件類型:這里為html文件
    app.engine('html', require('ejs').__express); // 使用ejs引擎解析html文件中ejs語(yǔ)法
    app.use(bodyparser.json()); // 使用bodyparder中間件,
    app.use(bodyparser.urlencoded({ extended: true }));
    // 使用 session 中間件
    app.use(session({
     secret : 'secret', // 對(duì)session id 相關(guān)的cookie 進(jìn)行簽名
     resave : true,
     saveUninitialized: false, // 是否保存未初始化的會(huì)話
     cookie : {
     maxAge : 1000 * 60 * 3, // 設(shè)置 session 的有效時(shí)間,單位毫秒
     },
    }));
    // 獲取登錄頁(yè)面
    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; // 登錄成功,設(shè)置 session
     res.redirect('/');
     }
     else{
     res.json({ret_code : 1, ret_msg : '賬號(hào)或密碼錯(cuò)誤'});// 若登錄失敗,重定向到登錄頁(yè)面
     }
    });
    // 獲取主頁(yè)
    app.get('/', function (req, res) {
     if(req.session.userName){ //判斷session 狀態(tài),如果有效,則返回主頁(yè),否則轉(zhuǎn)到登錄頁(yè)面
     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 實(shí)現(xiàn)登錄驗(yàn)證就完成。上面的例子 session 是保存在服務(wù)內(nèi)存中,當(dāng)然還可以保存在文件或數(shù)據(jù)庫(kù)中,只需要配置 session 中間件即可。

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

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

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

    總結(jié)

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

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    Express + Session 實(shí)現(xiàn)登錄驗(yàn)證功能:1. 寫在前面 當(dāng)我們登錄了一個(gè)網(wǎng)站,在沒有退出登錄的情況下,我們關(guān)閉了這個(gè)網(wǎng)站 ,過一段時(shí)間,再次打開這個(gè)網(wǎng)站,依然還會(huì)是登錄狀態(tài)。這是因?yàn)椋?dāng)我們登錄了一個(gè)網(wǎng)站,服務(wù)器會(huì)保存我們的登錄狀態(tài),直到我們退出登錄,或者保存的登錄狀態(tài)過期。那服務(wù)器
    推薦度:
    標(biāo)簽: 登錄 功能 認(rèn)證
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品欧美| 尤物TV国产精品看片在线| 久久精品视屏| 欧美成人精品一级高清片| 久久久久人妻一区精品色| 久久久久亚洲精品天堂久久久久久| 成人精品视频在线观看| 无码精品一区二区三区在线| 国产午夜精品理论片免费观看| 99热精品在线| jizz国产精品网站| 乱精品一区字幕二区| 香蕉依依精品视频在线播放 | 91亚洲国产成人久久精品网址| 精品久久久久久国产潘金莲| 亚洲国产精品成人久久蜜臀| 国产视频精品免费视频| 99国产精品国产免费观看| 久久精品国产亚洲网站| 91精品欧美综合在线观看| 精品国产第一国产综合精品 | 最新亚洲精品国自产在线观看| 69久久夜色精品国产69| 精品麻豆丝袜高跟鞋AV| 亚洲国产精品成人精品无码区在线 | 国内精品伊人久久久久AV影院| 亚洲av永久无码精品古装片| 最新国产在线精品观看| 亚洲精品成人片在线观看| 久久精品亚洲福利| 日韩精品中文字幕第2页| 久久久久久久久久久免费精品| 韩国三级中文字幕hd久久精品| 国产三级精品三级在线观看专1| 国产精品美女久久久久av爽| 国产精品美女久久久网AV| 国内精品久久久久久久影视麻豆| 国产精品偷伦视频免费观看了| 国产亚洲精品不卡在线| 精品无码久久久久久久久久| 日韩欧美一区二区三区中文精品|