国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Node.js開發(fā)-會(huì)話控制

這篇具有很好參考價(jià)值的文章主要介紹了Node.js開發(fā)-會(huì)話控制。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1) 介紹

所謂會(huì)話控制就是 對(duì)會(huì)話進(jìn)行控制

HTTP 是一種無(wú)狀態(tài)的協(xié)議,它沒(méi)有辦法區(qū)分多次的請(qǐng)求是否來(lái)自于同一個(gè)客戶端, 無(wú)法區(qū)分用戶

而產(chǎn)品中又大量存在的這樣的需求,所以我們需要通過(guò) 會(huì)話控制 來(lái)解決該問(wèn)題

常見(jiàn)的會(huì)話控制技術(shù)有三種:

  • cookie

  • session

  • token

2) cookie

cookie 是什么

cookie 是 HTTP 服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù)

  • cookie 是保存在瀏覽器端的一小塊數(shù)據(jù)
  • cookie 是按照域名劃分保存的

簡(jiǎn)單示例:

域名 cookie
www.baidu.com a=100; b=200
www.bilibili.com xid=1020abce121; hm=112411213
jd.com x=100; ocw=12414cce

cookie 的特點(diǎn)

瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí),會(huì)自動(dòng)將 當(dāng)前域名下 可用的 cookie 設(shè)置在請(qǐng)求頭中,然后傳遞給服務(wù)器

這個(gè)請(qǐng)求頭的名字也叫 cookie ,所以將 cookie 理解為一個(gè) HTTP 的請(qǐng)求頭也是可以的

cookie 的代碼操作

express 中可以使用 cookie-parser 進(jìn)行處理

//導(dǎo)入express
const express = require("express");
const cookieParser = require("cookie-parser");

const app = express();
app.use(cookieParser());

app.get("/set-cookie", (req, res) => {
    //res.cookie("name", "zhangsan"); // 會(huì)在瀏覽器關(guān)閉時(shí)銷毀
    res.cookie("name", "lisi", {maxAge: 60 * 1000});
    res.cookie("theme", "blue");
    res.send("home");
});

app.get("/remove-cookie", (req, res) => {
    res.clearCookie("name");
    res.send("remove success");
});

// get cookie
app.get("/get-cookie", (req, res) => {
    console.log(req.cookies);
    res.send(`Welcome ${req.cookies.name}`);
});

app.listen(3000);

3) session

session 是什么

session 是保存在 服務(wù)器端的一塊數(shù)據(jù) ,保存當(dāng)前訪問(wèn)用戶的相關(guān)信息

session 的作用

實(shí)現(xiàn)會(huì)話控制,可以識(shí)別用戶的身份,快速獲取當(dāng)前用戶的相關(guān)信息

session 運(yùn)行流程

填寫賬號(hào)和密碼校驗(yàn)身份,校驗(yàn)通過(guò)后創(chuàng)建 session 信息 ,然后將 session_id 的值通過(guò)響應(yīng)頭返回給瀏覽器

有了 cookie,下次發(fā)送請(qǐng)求時(shí)會(huì)自動(dòng)攜帶 cookie,服務(wù)器通過(guò) cookie 中的 session_id 的值確定用戶的身份

session 的代碼操作

express 中可以使用 express-session 對(duì) session 進(jìn)行操作

//導(dǎo)入express
const express = require("express");
//1. 安裝包 npm i express-session connect-mongo
//2. 引入 express-session connect-mongo
const session = require("express-session");
const MongoStore = require('connect-mongo');
const e = require("express");

const app = express();

//3. 設(shè)置 session 的中間件
app.use(session({
    name: 'sid', //設(shè)置cookie的name,默認(rèn)值是:connect.sid
    secret: 'atguigu', //參與加密的字符串(又稱簽名)加鹽
    saveUninitialized: false, //是否為每次請(qǐng)求都設(shè)置一個(gè)cookie用來(lái)存儲(chǔ)session的id
    resave: true, //是否在每次請(qǐng)求時(shí)重新保存session
    store: MongoStore.create({
        mongoUrl: 'mongodb://127.0.0.1:27017/bilibili' //數(shù)據(jù)庫(kù)的連接配置
    }),
    cookie: {
        httpOnly: true, // 開啟后前端無(wú)法通過(guò) JS 操作
        maxAge: 1000 * 60 * 5 // 這一條 是控制 sessionID 的過(guò)期時(shí)間的?。?!
    },
}))

app.get("/", (req, res) => {
    res.send("home");
});

// 設(shè)置 session
app.get("/login", (req, res) => {
    // username=admin&password=admin
    if(req.query.username === 'admin' && req.query.password === 'admin'){ 
        // 設(shè)置 session
        req.session.username = 'admin';
        req.session.sid = '1234rtgfds';
        res.send("登錄成功");
    }
});

// session讀取
app.get("/cart", (req, res) => {
    // 檢測(cè)session
    if (req.session.username){
        res.send(`Welcome ${req.session.username}`);
    } else {
        res.send("請(qǐng)先登錄");
    }
});

// session銷毀
app.get("/logout", (req, res) => {
    req.session.destroy(() => {
        res.send("退出成功");
    });
});

app.listen(3000);

4) session 和 cookie 的區(qū)別

cookie 和 session 的區(qū)別主要有如下幾點(diǎn):

1.存在的位置

  • cookie:瀏覽器端
  • session:服務(wù)端

2.安全性

  • cookie 是以明文的方式存放在客戶端的,安全性相對(duì)較低
  • session 存放于服務(wù)器中,所以安全性 相對(duì) 較好

3.網(wǎng)絡(luò)傳輸量

  • cookie 設(shè)置內(nèi)容過(guò)多會(huì)增大報(bào)文體積, 會(huì)影響傳輸效率
  • session 數(shù)據(jù)存儲(chǔ)在服務(wù)器,只是通過(guò) cookie 傳遞 id,所以不影響傳輸效率

4.存儲(chǔ)限制

  • 瀏覽器限制單個(gè) cookie 保存的數(shù)據(jù)不能超過(guò) 4K ,且單個(gè)域名下的存儲(chǔ)數(shù)量也有限制
  • session 數(shù)據(jù)存儲(chǔ)在服務(wù)器中,所以沒(méi)有這些限制

5) token

token 是什么

token 是服務(wù)端生成并返回給 HTTP 客戶端的一串加密字符串, token 中保存著 用戶信息

token 的作用

實(shí)現(xiàn)會(huì)話控制,可以識(shí)別用戶的身份,主要用于移動(dòng)端 APP

token 的工作流程

填寫賬號(hào)和密碼校驗(yàn)身份,校驗(yàn)通過(guò)后響應(yīng) token,token 一般是在響應(yīng)體中返回給客戶端的

后續(xù)發(fā)送請(qǐng)求時(shí),需要手動(dòng)將 token 添加在請(qǐng)求報(bào)文中,一般是放在請(qǐng)求頭中

token 的特點(diǎn)

  • 服務(wù)端壓力更小
    • 數(shù)據(jù)存儲(chǔ)在客戶端
  • 相對(duì)更安全
    • 數(shù)據(jù)加密
    • 可以避免 CSRF(跨站請(qǐng)求偽造)
  • 擴(kuò)展性更強(qiáng)
    • 服務(wù)間可以共享
    • 增加服務(wù)節(jié)點(diǎn)更簡(jiǎn)單

JWT

JWT(JSON Web Token )是目前最流行的跨域認(rèn)證解決方案,可用于基于 token 的身份驗(yàn)證

JWT 使 token 的生成與校驗(yàn)更規(guī)范

可以使用 jsonwebtoken 包 來(lái)操作 token文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-829477.html

const jwt = require('jsonwebtoken');

// 生成/創(chuàng)建 token
// let token = jwt.sign(用戶數(shù)據(jù),加密字符串, 配置對(duì)象);
let token = jwt.sign({
    username: 'zhangsan',
}, 'atguigu', {
    expiresIn: 60 // 單位是秒
});

console.log(token);

// 校驗(yàn) token
let t = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNzA3NzMxMDgyLCJleHAiOjE3MDc3MzExNDJ9.gyRxrxatBBL89twd5FYfrfNKYQ98d00NuwnnnF2_iNg";
jwt.verify(t, 'atguigu', (err, data) => {
    if (err) {
        console.log('token 驗(yàn)證失敗');
        return;
    }
    console.log('token 驗(yàn)證成功');
    console.log(data);
});

到了這里,關(guān)于Node.js開發(fā)-會(huì)話控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Node.js開發(fā)-MongoDB

    介紹 Mongoose 是一個(gè)對(duì)象文檔模型庫(kù),官網(wǎng) http://www.mongoosejs.net/ 作用 方便使用代碼操作 mongodb 數(shù)據(jù)庫(kù) 使用流程 文檔結(jié)構(gòu)可選的常用字段類型列表 類型 描述 String 字符串 Number 數(shù)字 Boolean 布爾值 Array 數(shù)組,也可以使用 [] 來(lái)標(biāo)識(shí) Date 日期 Buffer Buffer 對(duì)象 Mixed 任意類型,需要使

    2024年02月20日
    瀏覽(17)
  • Node 調(diào)試?yán)?,前端、Node 開發(fā)必備 - VSCode JS Debug Terminal

    經(jīng)??吹接型瑢W(xué)抱怨 Node 調(diào)試麻煩或者是搞不清怎么調(diào)試各種腳本、 Jest 、 Webpack 等等,而偶爾看到的調(diào)試相關(guān)的文章又全都是在寫 inspect 、 launch.json 這些方案,其實(shí)有一定學(xué)習(xí)成本。 而其實(shí)在 VSCode 中早已內(nèi)置了相當(dāng)無(wú)腦的 Debug 方式,就是 JavaScript Debug Terminal ,利用它我

    2024年02月05日
    瀏覽(25)
  • 【Nodejs】Node.js開發(fā)環(huán)境安裝

    【Nodejs】Node.js開發(fā)環(huán)境安裝

    在命令窗口中輸入 node -v 可以查看版本 0.x 完全不技術(shù) ES6 4.x 部分支持 ES6 特性 5.x 部分支持ES6特性(比4.x多些),屬于過(guò)渡產(chǎn)品,現(xiàn)在來(lái)說(shuō)應(yīng)該沒(méi)有什么理由去用這個(gè)了 6.x 支持98%的 ES6 特性 8.x 支持 ES6 特性 去 Node.js 的官網(wǎng)下載安裝包: 我們也可以下載歷史版本。 后續(xù)如果

    2024年02月15日
    瀏覽(35)
  • 安裝配置nvm-windows對(duì)Node.js與npm進(jìn)行版本控制

    安裝配置nvm-windows對(duì)Node.js與npm進(jìn)行版本控制

    由于Node.js版本原因,可能會(huì)出現(xiàn)一些錯(cuò)誤,如 IDEA中Node.js環(huán)境下npm報(bào)錯(cuò)Error:0308010C:digital envelope routines:unsupported 。而且不同的項(xiàng)目,所采用的Node.js的版本不同,重新卸載安裝配置,太過(guò)繁瑣。 所以可以使用nvm來(lái)動(dòng)態(tài)靈活管理Node.js的版本 。 注意:Win7系統(tǒng)不支持最新版本Nod

    2024年02月10日
    瀏覽(73)
  • Node.js博客項(xiàng)目開發(fā)思路筆記

    Node.js博客項(xiàng)目開發(fā)思路筆記

    開發(fā)一個(gè)博客系統(tǒng),具備博客基本功能 只開發(fā) server 端,不關(guān)心前端 首頁(yè)、作者頁(yè)、博客詳情頁(yè) 登陸頁(yè) 管理中心、新建頁(yè)、編輯頁(yè) 數(shù)據(jù)如何存儲(chǔ) 博客 id title content createtime author 1 標(biāo)題 1 內(nèi)容 1 1111112 zhangsan 2 標(biāo)題 2 內(nèi)容 2 1111111 lisi 用戶 id username password realname 1 zhangsan 123 張三

    2024年02月12日
    瀏覽(24)
  • 06_Node.js服務(wù)器開發(fā)

    06_Node.js服務(wù)器開發(fā)

    1.1 為什么學(xué)習(xí)服務(wù)器開發(fā) Node.js開發(fā)屬于服務(wù)器開發(fā),那么作為一名前端工程師為什么需要學(xué)習(xí)服務(wù)器開發(fā)呢? 為什么學(xué)習(xí)服務(wù)器開發(fā)? 能夠和后端程序員更加緊密配合 網(wǎng)站業(yè)務(wù)邏輯前置 擴(kuò)寬知識(shí)視野 1.2 服務(wù)器開發(fā)可以做哪些事情 實(shí)現(xiàn)網(wǎng)站的業(yè)務(wù)邏輯 實(shí)現(xiàn)數(shù)據(jù)的增刪改

    2024年02月07日
    瀏覽(46)
  • Node.js Shell 腳本開發(fā)指南(下)

    原文: exploringjs.com/nodejs-shell-scripting/ch_creating-shell-scripts.html 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 14.1 所需的知識(shí) 14.1.1 本章的下一步是什么 14.2 Node.js ESM 模塊作為 Unix 上獨(dú)立的 shell 腳本 14.2.1 Unix 上的 Node.js shell 腳本 14.2.2 Unix 上的 Hashbangs 14.2.3 在 Unix 上使文件可執(zhí)行 14.2.4 直接運(yùn)行

    2024年01月23日
    瀏覽(17)
  • Node.js Shell 腳本開發(fā)指南(中)

    原文: exploringjs.com/nodejs-shell-scripting/ch_nodejs-streams.html 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 9.1?總結(jié):異步迭代和異步生成器 9.2?流 9.2.1?管道 9.2.2?文本編碼 9.2.3?輔助函數(shù): readableToString() 9.2.4?一些初步說(shuō)明 9.3?可讀流 9.3.1?創(chuàng)建可讀流 9.3.2?通過(guò) for-await-of 從可讀流中讀取

    2024年01月24日
    瀏覽(54)
  • 第四章認(rèn)識(shí)Node.js模塊化開發(fā)

    Node.js系統(tǒng)模塊 續(xù)上一篇文章第三章認(rèn)識(shí)Node.js模塊化開發(fā)-CSDN博客,這次繼續(xù)來(lái)認(rèn)識(shí)和總結(jié)以下node的常用模塊開發(fā) Node.js系統(tǒng)模塊是指Node.js自帶的一些模塊,這些模塊可以直接在Node.js中使用,無(wú)需安裝其他包。以下是常用的Node.js系統(tǒng)模塊: fs模塊:用于處理文件系統(tǒng)。 htt

    2024年02月08日
    瀏覽(24)
  • 第五章認(rèn)識(shí)Node.js服務(wù)器開發(fā)

    目錄 認(rèn)識(shí)服務(wù)器開發(fā) 基本概念 基本作用 基本優(yōu)勢(shì) 基本組成 Node.js網(wǎng)站服務(wù)器 基本概述 基本步驟 基本特點(diǎn) 認(rèn)識(shí)HTTP協(xié)議 基本概述 HTTP的請(qǐng)求消息和響應(yīng)消息 請(qǐng)求消息 響應(yīng)消息 HTTP請(qǐng)求處理與響應(yīng)處理 GET請(qǐng)求參數(shù) POST請(qǐng)求參數(shù) 路由 靜態(tài)資源訪問(wèn) 認(rèn)識(shí)服務(wù)器開發(fā) 基本概念 服

    2024年02月07日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包