网站开发到上线的过程/爱站长

网站开发到上线的过程,爱站长,it外包公司为什么不能去,网架生产公司一、会话控制 1.介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制…

一、会话控制

1.介绍

所谓会话控制就是 对会话进行控制
HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户
而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题
常见的会话控制技术有三种:

  • cookie
  • session
  • token

2. cookie

1 cookie 是什么

cookieHTTP 服务器发送到用户浏览器并保存在本地的一小块数据
cookie 是保存在浏览器端的一小块数据
cookie 是按照域名划分保存的
简单示例:

域名cookie
www.baidu.coma=100;b=200
www.bilibili.comxid=1020abce121; hm=112411213
jd.comx=100; ocw=12414cce

2. cookie 的特点

浏览器向服务器发送请求时,会自动将 当前域名下 可用的 cookie 设置在请求头中,然后传递给服务器,这个请求头的名字也叫 cookie ,所以将 cookie 理解为一个 HTTP 的请求头也是可以的

3. cookie 的运行流程

填写账号和密码校验身份,校验通过后下发 cookie
在这里插入图片描述

有了 cookie 之后,后续向服务器发送请求时,就会自动携带 cookie
在这里插入图片描述

4. cookie 的代码操作

express 中可以使用 cookie-parser 进行处理

const express =require('express');
//1. 安装 cookie-parser npm i cookie-parser
//2. 引入 cookieParser 包
const cookieParser = require('cookie-parser');
const app = express();
//3. 设置 cookieParser 中间件
app.use(cookieParser());
//4-1 设置 cookie
app.get('/set-cookie', (request, response) => {// 不带时效性response.cookie('username','wangwu');// 带时效性response.cookie('email','23123456@qq.com', {maxAge: 5*60*1000 });//响应response.send('Cookie的设置');
});
//4-2 读取 cookie
app.get('/get-cookie', (request, response) => {//读取 cookieconsole.log(request.cookies);//响应体response.send('Cookie的读取');
});
//4-3 删除cookie
app.get('/delete-cookie', (request, response) => {//删除response.clearCookie('username');//响应response.send('cookie 的清除');
});
//4. 启动服务
app.listen(3000, () => {console.log('服务已经启动....');
});

不同浏览器中的 cookie 是相互独立的,不共享

3. session

1. session 是什么

session 是保存在 服务器端的一块儿数据 ,保存当前访问用户的相关信息

2. session 的作用

实现会话控制,可以识别用户的身份,快速获取当前用户的相关信息

3. session 运行流程

填写账号和密码校验身份,校验通过后创建 session 信息 ,然后将 session_id 的值通过响应头返回
给浏览器
在这里插入图片描述

有了 cookie,下次发送请求时会自动携带 cookie,服务器通过 cookie 中的 session_id 的值确定用户的身份
在这里插入图片描述

4. session 的代码操作

express 中可以使用 express-sessionsession 进行操作

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 app = express();
//3. 设置 session 的中间件
app.use(session({name: 'sid', //设置cookie的name,默认值是:connect.sidsecret: 'secret', //参与加密的字符串(又称签名)saveUninitialized: false, //是否为每次请求都设置一个cookie用来存储session的idresave: true, //是否在每次请求时重新保存sessionstore: MongoStore.create({mongoUrl: 'mongodb://127.0.0.1:27017/project' //数据库的连接配置}),cookie: {httpOnly: true, // 开启后前端无法通过 JS 操作maxAge: 1000 * 300 // 这一条 是控制 sessionID 的过期时间的!!!},
}))
//创建 session
app.get('/login', (req, res) => {//设置sessionreq.session.username = 'zhangsan';req.session.email = 'zhangsan@qq.com'res.send('登录成功');
})
//获取 session
app.get('/home', (req, res) => {console.log('session的信息');console.log(req.session.username);if (req.session.username) {res.send(`你好 ${req.session.username}`);}else{res.send('登录 注册');}
})
//销毁 session
app.get('/logout', (req, res) => {//销毁session// res.send('设置session');req.session.destroy(() => {res.send('成功退出');});
});
app.listen(3000, () => {console.log('服务已经启动, 端口 ' + 3000 + ' 监听中...');
});

session示例

4. sessioncookie 的区别

cookiesession 的区别主要有如下几点:

  1. 存在的位置
    • cookie:浏览器端
    • session:服务端
  2. 安全性
    • cookie 是以明文的方式存放在客户端的,安全性相对较低
    • session 存放于服务器中,所以安全性 相对 较好
  3. 网络传输量
    • cookie 设置内容过多会增大报文体积, 会影响传输效率
    • session 数据存储在服务器,只是通过 cookie 传递 id,所以不影响传输效率
  4. 存储限制
    • 浏览器限制单个 cookie 保存的数据不能超过 4K ,且单个域名下的存储数量也有限制
    • session 数据存储在服务器中,所以没有这些限制

5. token

1. token 是什么

token 是服务端生成并返回给 HTTP 客户端的一串加密字符串, token 中保存着 用户信息

2. token 的作用

实现会话控制,可以识别用户的身份,主要用于移动端 APP

3. token 的工作流程

填写账号和密码校验身份,校验通过后响应 tokentoken 一般是在响应体中返回给客户端的
在这里插入图片描述

后续发送请求时,需要手动将 token 添加在请求报文中,一般是放在请求头中
在这里插入图片描述

4. token 的特点

  • 服务端压力更小
    • 数据存储在客户端
  • 相对更安全
    • 数据加密
    • 可以避免 CSRF(跨站请求伪造)
  • 扩展性更强
    • 服务间可以共享
    • 增加服务节点更简单

5. JWT

JWT(JSON Web Token )是目前最流行的跨域认证解决方案,可用于基于 token 的身份验证
JWT 使 token 的生成与校验更规范
我们可以使用 jsonwebtoken 包 来操作 token

//导入 jsonwebtokan
const jwt = require('jsonwebtoken');
//创建 token
// jwt.sign(数据, 加密字符串, 配置对象)
let token = jwt.sign({username: 'zhangsan'},'secret',{expiresIn: 60 //单位是 秒}
)
//解析 token
jwt.verify(token, 'secret', (err, data) => {if(err){console.log('校验失败~~');return}console.log(data);
})

外部阅读https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

token示例

二、 附录

1. 本地域名

所谓本地域名就是 只能在本机使用的域名 ,一般在开发阶段使用

  1. 操作流程
    编辑文件 C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.baidu.com

如果修改失败, 可以修改该文件的权限
在这里插入图片描述

  1. 原理
    在地址栏输入 域名 之后,浏览器会先进行 DNS(Domain Name System) 查询,获取该域名对应的 IP 地址
    请求会发送到 DNS 服务器,可以 根据域名返回 IP 地址
    可以通过 ipconfig /all 查看本机的 DNS 服务器
    hosts 文件也可以设置域名与 IP 的映射关系,在发送请求前,可以通过该文件获取域名的 IP 地址

2. HTTPS(在服务器端完成)

https 本意示 http + SSL(Secure Sockets Layer 安全套接层)
https 可以 加密HTTP报文,所以大家也可以理解为是安全的HTTP
工具官网:https://certbot.eff.org
操作流程:

  1. 下载工具:https://dl.eff.org/certbot-beta-installer-win_amd64.exe
  2. 安装工具
  3. 管理员命令: certbot certonly --standalone
  4. 代码配置如下:
const https = require('https')
https.createServer({key: fs.readFileSync('/etc/letsencrypt/path/to/privkey.pem'),cert: fs.readFileSync('/etc/letsencrypt/path/to/cert.pem'),ca: fs.readFileSync('/etc/letsencrypt/path/to/chain.pem'),}, app
)
.listen(443, ()=>{console.log('Listening...')
})
  1. 证书更新,证书有效期为三个月,可以通过下面的命令更新
## 一般更新
certbot renew
## 强制更新
certbot --force-renewal

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java编程练习之类的继承

1.创建银行卡类,并分别设计两个储蓄卡和信用卡子类。 import javax.swing.plaf.BorderUIResource;import java.util.Scanner;class Card {int Id; //银行卡;int password; //密码;double balance2000; //账户存款金额;String A…

正则表达式与正则可视化工具:解密文本处理的利器

正则表达式与正则可视化工具:解密文本处理的利器 引言 在计算机科学和软件开发领域,正则表达式是一种强大而灵活的文本处理工具。然而,对于初学者来说,正则表达式的语法和规则可能会显得晦涩难懂。为了帮助初学者更好地理解和学…

ubuntu快速安装miniconda

ubuntu快速安装miniconda 环境 ubuntu.22.04 显卡 RTX 3050 关于选择Miniconda还是Anaconda的问题,Anaconda安装包比较大,耗时比较长,如果你是绝对的初学者,选择Anaconda会比较稳妥一些;否则建议你还是选择Miniconda安…

linux系统下vscode portable版本的python环境搭建003:venv

这里写自定义目录标题 python安装方案一. 使用源码安装(有[构建工具](https://blog.csdn.net/ResumeProject/article/details/136095629)的情况下)方案二.使用系统包管理器 虚拟环境安装TESTCG 本文目的:希望在获得一个新的系统之后&#xff…

LeetCode:67.二进制求和

67. 二进制求和 - 力扣(LeetCode) 又是一道求和题,% / 在求和的用途了解了些, 目录 题目: 思路分析: 博主代码: 官方代码: 每日表情包: 题目: 思路分析&#xf…

2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI

文章目录 1 GUILayout2 EditorGUI 介绍3 文本、层级、标签、颜色拾取3.1 LabelField3.2 LayerField3.3 TagField3.4 ColorField3.5 代码示例 4 枚举选择、整数选择、按下按钮4.1 EnumPopup / EnumFlagsField4.2 IntPopup4.3 DropdownButton4.4 代码示例 5 对象关联、各类型输入…

Linux基础I/O(三)——缓冲区和文件系统

文章目录 什么是C语言的缓冲区理解文件系统理解软硬链接 什么是C语言的缓冲区 C语言的缓冲区其实就是一部分内存 那么它的作用是什么? 下面有一个例子: 你在陕西,你远在山东的同学要过生日了,你打算送给他一份生日礼物。你有两种方…

Centos9部署LAMP

配置LAMP 参考文档 https://blog.csdn.net/weixin_51432789/article/details/112254685 首先安装 yum install -y libxml2-devel 安装apr-1.7.4 解压 tar xf apr-1.7.4.tar.gz 安装以来 yum -y install gcc cd apr-1.7.4/ 预编译 ./configure --prefix/usr/local/…

鸿蒙系统进一步学习(一):学习资料总结,少走弯路

随着鸿蒙Next的计划越来越近,笔者之前的鸿蒙系统扫盲系列中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为资料太多&a…

【lesson51】信号之信号处理

文章目录 信号处理可重入函数volatileSIGCHLD信号 信号处理 信号产生之后,信号可能无法被立即处理,一般在合适的时候处理。 1.在合适的时候处理(是什么时候?) 信号相关的数据字段都是在进程PCB内部。 而进程工作的状态…

零基础学编程怎么入手,中文编程工具构件箱之星空构件用法教程,系统化的编程视频教程上线

零基础学编程怎么入手,中文编程工具构件箱之星空构件用法教程,系统化的编程视频教程上线 一、前言 今天给大家分享的中文编程开发语言工具资料如下: 编程入门视频教程链接 http://​ https://edu.csdn.net/course/detail/39036 ​ 编程…

Days 29 ElfBoard LCD屏双电荷泵电路原理

7寸LCD屏幕的屏幕排线中采用的供电电压是5V供电,但是在屏幕工作时需要VCOM-5.3V、AVDD-12.5V、VGL--7V、VGH-17V几组电压,所以要对初始的5V电源进行DC-DC电压变换,在这里我们用到了双电荷泵电路。 再此电路中VCC_5V为电源输入,E…

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

正文共:1333 字 21 图,预估阅读时间:2 分钟 上次我们在Windows上尝试用Tesla M4配置深度学习环境(TensorFlow识别GPU难道就这么难吗?还是我的GPU有问题?),但是失败了。考虑到Windows…

LeetCode662:二叉树最大宽度(二叉树非典型最大宽度,BFS层序遍历重编号)

题目 给你一棵二叉树的根节点 root ,返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,…

JAVA设计模式之备忘录模式详解

备忘录模式 1 备忘录模式介绍 备忘录模式提供了一种对象状态的撤销实现机制,当系统中某一个对象需要恢复到某一历史状态时可以使用备忘录模式进行设计. 很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按…

Stable Diffusion 模型下载:majicMIX fantasy 麦橘幻想

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

【Web】Redis未授权访问漏洞学习笔记

目录 简介 靶机配置 Redis持久化 Redis动态修改配置 webshell 反弹shell Redis写入反弹shell任务 加固方案 简介 Redis(Remote Dictionary Server 远程字典服务器)是一个开源的内存数据库,也被称为数据结构服务器,它支持…

SCI论文作图规范

SCI论文作图规范包括以下几个方面: 一、图片格式 SCI论文通常接受的图片格式包括TIFF、EPS和PDF等。其中,TIFF格式是一种高质量的图像格式,适用于需要高分辨率和颜色准确性的图片;EPS格式是一种矢量图形格式,适用于需…

位运算+leetcode ( 2 )

题一:只出现一次的数字(1) 1.链接 136. 只出现一次的数字 - 力扣(LeetCode) 2.思想 借用位运算中异或操作符的特点,a^a0,0^aa先定义一个sum0就用一个循环来遍历这个数组,每次都进行…

Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御

Google Cloud 的 2024 年威胁范围报告预测了云安全的主要风险,并提出了加强防御的策略。 该报告由 Google 安全专家撰写,为寻求预测和应对不断变化的网络安全威胁的云客户提供了宝贵的资源。 该报告强调,凭证滥用、加密货币挖矿、勒索软件和…