Cookie和Session

Cookie

        Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

  由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理

cookie使用

        安装cookie

//
npm i cookie-parser -S

        引入cookie

let cookieParser = require('cookie-parser');

        使用cookie

//第三方中间件
//app.use(cookieParser()); //未加密

app.use(cookieParser('lanhu')); // 签名  加密


router.get('/myCode', (req, res) => {
    res.cookie('code', captcha.text })  //未加密

    res.cookie('code', captcha.text, {
        singed: true //使用加密形式
    })

    res.send('ok');
})

cookie的特点:

  • 容易被篡改

  • cookie大小有限制

  • 安全性不太好

Session

        在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

        会话(session)跟踪,会话:指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是sesscookie。session通过在服务器端记录信息确定用cookie通过在客户端记录信息确定用户身份

        简单来讲,session是特殊的cookie,解决了cookie一定的安全问题

session使用

        安装session

//
npm i express-session -S

       引入session 

let expressSession = require('express-session');

       使用session

//第三方中间件
app.use(expressSession({
    resave: true,//强制刷新
    saveUninitialized: true,    //
    secret: 'lanhu'     //签名  
}));

router.get('/myCode', (req, res) => {
    req.session.ccccode=captcha.text;//将数据保存到session中

    res.send('ok');
})

cookie和session的区别

cookie与session的区别:

  • cookie数据存放在客户端(浏览器);session数据存放在服务端(后台)

  • cookie有大小限制;session没有大小限制

  • cookie容易被篡改;session不容易被篡改,安全性相对高

  •  session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息

  • session中保存的是对象,cookie中保存的是字符串 ,session 可以放在 文件、数据库、或内存中都可以

  • session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

samesite问题

Google 在2020年2月4号发布的 Chrome 80 版本(schedule:https://www.chromestatus.com/features/schedule)中默认屏蔽所有第三方 Cookie,即默认为所有 Cookie 加上 SameSite=Lax 属性(Cookies default to SameSite=Lax - Chrome Platform Status),并且拒绝非Secure的Cookie设为 SameSite=None(Reject insecure SameSite=None cookies - Chrome Platform Status) SameSite的作用就是防止跨域传送cookie,从而防止 CSRF 攻击和用户追踪,此举是为了从源头屏蔽 CSRF 漏洞。 关于 SameSite 属性的介绍,可参考阮一峰的《Cookie 的 SameSite 属性》。

上述问题中,在当前系统访问第三方系统时,带了一些cookie过去,然后被这个SameSite机制拦截掉了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值