express之cookie和session

目录

1.cookie

1.1 设置cookie

 1.2 获取cookie

1.通过请求头获取cookie

2.通过第三方模块来获取cookie

1.3 cookie的缺点

2.session

2.1配置session

2.2设置session

2.3 获取session


cookie与session的基本概念与特性在之前的博文中已经有所介绍,所以这里就只简单的写一下express中cookie与session的设置与获取.

1.cookie

 HTTP是无状态的链接, 你请求一个网页结束以后,此时你和服务器之间没有任何关系了,没有数据持续通路,下一次访问,服务器是不知道你来过的,所以在HTTP最初的版本,就设计了一个cookie的东西,简单说就是服务器在response的响应头中设置一个set-cookie的报文头今后浏览器要遵循一个协议,每次访问这个服务器的时候,都要带着cookies字段上去.

1.1 设置cookie

今后浏览器要遵循一个协议,每次访问这个服务器的时候,都要带着cookies字段上去

值得注意的是通过响应头设置cookie信息,而不是请求头

app.get('/',(req,res)=>{
    //设置cookie
    res.cookie('name',"why",{
        maxAge:2*60*1000,
        httpOnly:true
    });
    res.send('首页');
})

 在请求头中可以看到我们设置的cookie,因此我们就可以通过请求头来拿到我们设置的cookie信息

 1.2 获取cookie

1.通过请求头获取cookie

    //通过请求头来获取cookie信息
    console.log(req.headers.cookie);


    //name=why

通过请求头我们获取的是字符串,我们需要自己处理成为对象 .

2.通过第三方模块来获取cookie

我们可以使用第三方模块cookie-parser,这个包就是用来格式化cookie的显示,只有装了这个依赖之后,服务器才能更好的读取cookie.

安装第三方包 

npm install -s cookie-parser

cookie-parse是一个中间件,可以通过use去使用

const cookieparser = require("cookie-parser")
app.use(cookieparser())

然后就可以通过req.cookies()拿到这个数据

app.get("/",function(req,res){
  console.log(req.cookies);  
  res.send("首页 ")
})

//得到的cookie是键值对的形式
//{ name: 'why' }

1.3 cookie的缺点

cookie的缺点: 就是不安全,(cookie 可以自由被篡改,并且是明文保存的) 所以要不就是通过加密处理,或者我们可以使用session

2.session

session依赖cookie,是一种特殊的cookie,通常用于制作登录验证

session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。

HTML5没有替代session办法,所以session估计还要一直流行下去

session最大的好处就是对开发人员透明,开发人员只需要使用session而不需要在意他的原理,甚至不需要知道他是如何辨别每个人的.

使用session需要是用一个express-session中间件

安装中间件express-session

npm install -s express-session

引入express-session

const session = require("express-session")

2.1配置session

app.use(session({
  secret: 'keyboard cat',   // 加密字符串会通过这个字符串进行加密,自己可以设置
  cookie: {maxAge:6000},   // 设置过期时间,也可以在里面设置其他的想要的cookie属性
  resave: true,   // 即时session 没有被修改, 也保存session值, 默认为true
  saveUninitialized:true, //  无论有没有session cookie 每次请求都设置个session cookie 默认标示为 connect.sid
    rolling: true   // 属性cookie的时间
}))

2.2设置session

app.get('/',(req,res) => {
    // 设置session
    req.session.user = {name:'why',age:18}
    res.send("首页")
})

2.3 获取session

 console.log(req.session)


/*
Session {
  cookie: {
    path: '/',
    _expires: 2020-04-28T02:55:55.611Z,
    originalMaxAge: 119999,
    httpOnly: true
  },
  user: { name: 'why', age: 18 }
}
*/

通过这种方式我们就可以拿到之前设置的cookie信息了

使用session的时候服务器会在内存中(内存条,不是硬盘,不是数据库)缓存你的一些信息,哈希结构(hash结构,k-v对结构),然后通过cookie发给前端一个乱码,持有这个cookie乱码的人访问这个服务器,服务器会通过乱码匹配拿到这个用户在内存中缓存的值,服务器就只到你的值是多少.

程序员编程的时候是感觉不到session在工作,任何语言中都是一样

3. Cookie和Session区别


1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

2、cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行cookie欺骗 考虑到安全应当使用 session。

3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 cookie。

4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Web开发中,可以使用cookiesession存储用户id,具体方法如下: 1. 使用cookie 在前端中,可以使用JavaScript中的document.cookie来设置和读取cookie。例如,可以使用以下代码设置一个名为"id",值为"123",过期时间为一天的cookie: ```javascript document.cookie = "id=123;expires=" + new Date(new Date().getTime() + 86400000).toGMTString(); ``` 在后端中,可以使用HTTP响应头中的Set-Cookie字段来设置cookie。例如,在Node.js中,可以使用以下代码将cookie设置为响应头中: ```javascript res.setHeader('Set-Cookie', 'id=123;expires=' + new Date(new Date().getTime() + 86400000).toGMTString()); ``` 在后续的请求中,可以使用document.cookie来读取cookie的值。 2. 使用session 在前端中,可以使用浏览器提供的sessionStorage或localStorage来存储数据。sessionStorage存储的数据仅在当前会话期间有效,而localStorage存储的数据在浏览器关闭后依然有效。例如,可以使用以下代码将id存储到sessionStorage中: ```javascript sessionStorage.setItem('id', '123'); ``` 在后端中,可以使用服务器框架提供的session中间件来实现session功能。例如,在Express框架中,可以使用以下代码启用session中间件: ```javascript const session = require('express-session'); app.use(session({ secret: 'my-secret-key', resave: false, saveUninitialized: false, cookie: { secure: false, maxAge: 86400000 } })); ``` 在路由处理函数中,可以使用req.session来访问session对象,并将id存储到session对象中: ```javascript router.get('/', (req, res) => { req.session.id = '123'; res.send('Hello World!'); }); ``` 在后续的请求中,可以使用req.session.id来获取存储在session中的id值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值