在 Web 开发中,Session 和 Cookie 是非常常用的两个概念。Session 用于存储用户的登录状态、购物车等数据,而 Cookie 则用于存储用户的身份信息、偏好设置等数据。在 Deno 中,我们也可以很方便地使用 Session 和 Cookie。
Session
Session 是一种服务器端存储用户数据的机制,它可以跨请求保持用户数据的一致性。在 Deno 中,我们可以使用第三方库 oak_session
来实现 Session 功能。
安装 oak_session
$ deno install --allow-read --allow-write --allow-net --unstable https://deno.land/x/oak_session/mod.ts
使用 oak_session
// javascriptcn.com 代码示例 import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { oakCors } from "https://deno.land/x/cors/mod.ts"; import { Session } from "https://deno.land/x/oak_session/mod.ts"; const app = new Application(); const router = new Router(); const session = new Session({ framework: "oak" }); await session.init(); router.get("/set", async (ctx) => { ctx.state.session.views = (ctx.state.session.views || 0) + 1; ctx.response.body = `${ctx.state.session.views} views`; }); router.get("/get", async (ctx) => { ctx.response.body = `${ctx.state.session.views} views`; }); app.use(oakCors()); app.use(session.use()(session)); app.use(router.routes()); app.use(router.allowedMethods()); await app.listen({ port: 8000 });
在上面的例子中,我们创建了一个 Session
实例,并使用 session.use()
方法将其挂载到 app
上。然后我们定义了两个路由 /set
和 /get
,分别用于设置和获取 Session 中的数据。
在 /set
路由中,我们通过 ctx.state.session
来访问 Session 对象,并将 views
属性加 1。在 /get
路由中,我们同样通过 ctx.state.session
来访问 Session 对象,并返回 views
属性。
Session 配置
Session
构造函数可以接受一个配置对象,用于配置 Session 的一些参数。下面是一些常用的配置项:
key
:Session 的名称,默认为koa:sess
。maxAge
:Session 的最大有效期,默认为 null。overwrite
:是否允许覆盖 Session,默认为 true。httpOnly
:是否允许客户端访问 Session,默认为 true。signed
:是否对 Session 进行签名,默认为 true。rolling
:是否每次请求都重新设置 Session 的过期时间,默认为 false。renew
:是否在 Session 即将过期时自动续期,默认为 false。secure
:是否只在 HTTPS 连接中传输 Session,默认为 false。sameSite
:Cookie 的 SameSite 属性,默认为 "Lax"。
Cookie
Cookie 是一种客户端存储用户数据的机制,它可以在浏览器和服务器之间传递数据。在 Deno 中,我们可以使用第三方库 deno_cookie
来实现 Cookie 功能。
安装 deno_cookie
$ deno install --allow-read --allow-write --allow-net --unstable https://deno.land/x/cookie/mod.ts
使用 deno_cookie
// javascriptcn.com 代码示例 import { Application, Router } from "https://deno.land/x/oak/mod.ts"; import { oakCors } from "https://deno.land/x/cors/mod.ts"; import { setCookie, getCookie } from "https://deno.land/x/cookie/mod.ts"; const app = new Application(); const router = new Router(); router.get("/set", async (ctx) => { setCookie(ctx, { name: "name", value: "Deno", httpOnly: true, }); ctx.response.body = "Cookie set"; }); router.get("/get", async (ctx) => { const name = getCookie(ctx, "name"); ctx.response.body = `Cookie name is ${name}`; }); app.use(oakCors()); app.use(router.routes()); app.use(router.allowedMethods()); await app.listen({ port: 8000 });
在上面的例子中,我们使用 setCookie()
方法设置了一个名为 name
、值为 Deno
的 Cookie,同时将 httpOnly
属性设置为 true。在 /get
路由中,我们使用 getCookie()
方法获取了名为 name
的 Cookie 的值,并返回给客户端。
Cookie 配置
setCookie()
方法可以接受一个配置对象,用于配置 Cookie 的一些参数。下面是一些常用的配置项:
name
:Cookie 的名称。value
:Cookie 的值。expires
:Cookie 的过期时间,可以为一个时间戳或日期对象。maxAge
:Cookie 的最大有效期,单位为秒。domain
:Cookie 的域名。path
:Cookie 的路径。secure
:是否只在 HTTPS 连接中传输 Cookie。httpOnly
:是否允许客户端访问 Cookie。sameSite
:Cookie 的 SameSite 属性。
总结
在 Deno 中使用 Session 和 Cookie 非常简单。通过上面的示例代码,我们可以学习到如何使用第三方库 oak_session
和 deno_cookie
来实现 Session 和 Cookie 功能。同时,我们也了解了 Session 和 Cookie 的一些配置项,可以根据需求进行配置。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655b2052d2f5e1655d54cbfc