Day16-守护饼乾大作战(三)

前言

前两天介绍完 Secure、HttpOnly、SameSite 几个跟 cookie 安全性有关的属性之後,大家应该也读得有点累了,今天要来讲点比较轻松的,也就是怎麽在後端的 API Server 设置 cookie 时把前几天讲到的属性给加上去

Node.js

首先来讲讲用 express 写的 API Server,在设定 cookie 时如果想加上其他属性,只要在 res.cookie() 最後一个参数里面加上去就好了

app.post('/signin', confirmPassword, (req, res) => {
    res.cookie("sessionID", '123456789aabb', {
      httpOnly: true,
      secure: true,
      samwSite: 'Lax',
    });
)

但直接把 secure 设定成 true 有个不太方便的地方,就是因为平常在开发时通常不会在 localhost 使用 HTTPS,因此会导致 cookie 送不出去。而解决方法也很简单,只要根据 NODE_ENV 去做出不同的设定就可以了,所以也千万别忘记要在 production 上把 NODE_ENV 设为 production,而开发时则是设为 development

app.post('/signin', confirmPassword, (req, res) => {
    res.cookie("sessionID", '123456789aabb', {
      httpOnly: true,
      secure: process.env.NODE_ENV !== "development",
      samwSite: 'Lax',
    });
)

Go

而在 gin 里面也是类似的做法,在验证完帐号密码要 set cookie 时,把 Secure、HttpOnly、SameSite 这些属性都加上去就可以了,也记得在 Secure 那边要先判断目前是不是在 production 上,不然在 localhost 测试时会怎麽样都登入不进去哦

func signInHandler(ctx *gin.Context) {
    http.SetCookie(ctx.Writer, &http.Cookie{
        Name:     "sessionID",
        Value:    "123456789aabb",
        Secure:   os.Getenv("GIN_MODE") == "release",
        HttpOnly: true,
        SameSite: http.SameSiteLaxMode
    })
}

func main() {
    router := gin.Default()
    router.POST("/signin", confirmPassword, signInHandler)
    router.Run(":8888")
}

小结

今天用几个范例讲解了怎麽在 API Server 上 Set-Cookie 时可以加上想要的属性,用起来非常简单,而且各语言几乎都是这样写,所以就算你写的不是 Node.js 或 Go,只要上网查一下 flask set samesite cookie 之类的就可以找到不少资料罗~


<<:  Day 16 Wizard-弹跳视窗

>>:  DAY 19 Big Data 5Vs – Variety(速度) EMR (2)

Day10 永丰金API 订单通知服务

昨天提到今天要讲一个交易上特别重要的流程,就是付款状态! 为什麽呢? 因为在交易的过成功前是最重要的...

15 - NVM - Node.js 版本管理工具

Node.js 版本间的差异使得有些专案需要使用特定的版本才能正常运作,因此各专案间需要来回的切换 ...

软件开发执行方式 - SCRUM

在软件开发中很常听到 SCRUM 这个字,本身是待在软件业当PM公司没有跑到非常正规的 SCRUM ...

烟囱式架构 (Information Silo Architecture)

烟囱式架构 相对於中台架构,烟囱式架构就像多个互相独立的应用系统,代表着业务流程的区隔 ─ 重复的功...

Day13 Android - banner(横幅广告)应用(2)

接下来要讲有关线上取图的banner,会分开主要是因为有些微的不一样,包含在Manifest中添加网...