nodejs之操作状态保持技术cookie和session

目录

3.1、cookie

3.2、session


  • 因为 http 是一种无状态协议,浏览器请求服务器是无状态的。

  • 无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

  • 无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。

  • 有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

  • 实现状态保持主要有两种方式:

    • 在客户端存储信息使用Cookie

    • 在服务器端存储信息使用Session

无状态协议:

  1. 协议对于事务处理没有记忆能力

  2. 对同一个 url 请求没有上下文关系

  3. 每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况

  4. 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器

  5. 人生若只如初见

状态举例:

  • 有状态:

    • A:你今天中午吃的啥?

    • B:吃的大盘鸡。

    • A:味道怎么样呀?

    • B:还不错,挺好吃的。

  • 无状态:

    • A:你今天中午吃的啥?

    • B:吃的大盘鸡。

    • A:味道怎么样呀?

    • B:???啊?啥?啥味道怎么样?

  • 所以需要cookie这种东西:

    • A:你今天中午吃的啥?

    • B:吃的大盘鸡。

    • A:你今天中午吃的大盘鸡味道怎么样呀?

    • B:还不错,挺好吃的。

3.1、cookie

特点:

1、cookie由服务器生成,保存在浏览器端的一小段文本信息

2、cookie是以键和值得形式进行存储

3、浏览器在访问一个网站的服务器时,会自动在请求头中把和本网站相关的所有cookie发送给服务器

4、cookie是基于域名安全的

5、cookie有过期时间,默认关闭浏览器之后过期

使用:

先安装和引入:cookie-parser

注册到app中:

const cookieParase = require('cookie-parser');
app.use(cookieParase());

设置cookie:res.cookie('name', "node", {maxAge: 1000 * 60 * 60 * 2 });

获取cookie:let name = req.cookies["name"]

完整代码如下:

// 1、安装cookie-parser
// 2、引入cookie-parser并注册到app中
const cookieParase = require('cookie-parser');
app.use(cookieParase());

app.get("/setCookie",(req,res)=>{
    //设置cookie
    res.cookie('name', "node", {maxAge: 1000 * 60 * 60 * 2 });    // 过期时间:单位毫秒
    res.cookie('age', 11); 
    res.send("设置了cookie")
})

app.get("/getCookie",(req,res)=>{
    //获取cookie信息
    let name = req.cookies["name"];
    let age = req.cookies["age"];
    res.send(`获取cookie, ${name}, ${age}`);
})

3.2、session

特点:

1、session数据保存在服务器端

2、session是以键和值的形式进行存储

3、session依赖于cookie,每个session信息对应的客户端的标识保存在cookie中

使用:

先安装和引入:cookie-session

const cookieSession = require('cookie-session');

注册到app中:

app.use(cookieSession({
    name:"my_session",  //name为session名,自己起一个字符串就行
    keys:["$^%%&^&%$RT%&TYGSGSFRR554785432$#@$$#%$@#%"],  // 内部加密需要的keys, keys为随机字符串
    maxAge: 1000 * 60 * 60 * 24   // 过期时间
}))

设置session:req.session["name"] = "session_node"

获取session:let name = req.session["name"]

完整代码如下:

// 1、先安装:yarn add cookie-session     
//    如果报错,后面添加版本号,然后一直回车就好    yarn add cookie-session@2.0.0
// 2、设置到app中  
const cookieSession = require('cookie-session');
app.use(cookieSession({
    name:"my_session",  //name为session名,自己起一个字符串就行
    keys:["$^%%&^&%$RT%&TYGSGSFRR554785432$#@$$#%$@#%"],  // 内部加密需要的keys, keys为随机字符串
    maxAge: 1000 * 60 * 60 * 24   // 过期时间
}))

app.get("/setSession",(req,res)=>{
    //设置session
    req.session["name"] = "session_node"
    req.session["age"] = 11 
    
    res.send("设置了Session")
})

app.get("/getSession",(req,res)=>{
    //获取session信息
    let name = req.session["name"]
    let age = req.session["age"]
    res.send(`获取Session, ${name}, ${age}`);
})
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值