返回介绍

server.state(name, [options])

发布于 2024-02-12 19:53:56 字数 4071 浏览 0 评论 0 收藏 0

HTTP state management 使用客户端 cookie 在多个请求中保持状态。 注册 cookie 定义,如下:

  • name - cookie 名称字符串。

  • options - 是可选的 cookie 设置:

    • ttl - 以毫秒为单位的生存时间(time-to-live) 默认为 null (session 生命周期 - 浏览器关闭时会删除 cookie).

    • isSecure - 设置 'Secure' 标识. 默认为 true .

    • isHttpOnly - 设置 'HttpOnly' 标识. 默认为 true .

    • isSameSite - 设置 'SameSite' flag . 该值必须是其中之一:

      • false - 没有标识。
      • 'Strict' - 设置值为 'Strict' (这是默认值).
      • 'Lax' - 设置值为 'Lax' .
    • path - path 范围. 默认为 null (没有 path).

    • domain - domain 范围. 默认为 null (没有 domain).

    • autoValue - 如果存在并且未从客户端接收 cookie 或由路由处理程序显式设置, cookie 将自动添加到具有提供值的响应中。 该值可以是具有签名 async function(request) 的函数,其中:

      • request - request object .
    • encoding - 编码在序列化之前对提供的值执行 encode。 选项包括:

      • 'none' - 不 encoding. 使用时,cookie 值必须是字符串。这是默认值。
      • 'base64' - 字符串值使用 Base64 编码。
      • 'base64json' - 对象值是 JSON 字符串化,然后使用 Base64 编码。
      • 'form' - 使用 x-www-form-urlencoded 方法对对象值进行编码。
      • 'iron' - 加密和签名值使用 iron .
    • sign - 用于计算用于 cookie 完整性验证的 HMAC 的对象。这不提供隐私, 只是意味着验证 cookie 值是由服务器生成的。 使用 'iron' 编码时冗余。 选项包括:

    • password - 用于 'iron' 编码的密码(必须至少 32 个字符)。

    • iron - 'iron' 编码的选项. 默认为 require('iron').defaults .

    • ignoreErrors - 如果 true , 错误被忽略并被视为缺少 cookie。

    • clearInvalid - 如果 true , 自动指示客户端删除无效的 cookie。 默认为 false .

    • strictHeader - 如果 false , 允许任何 cookie 值,包括违反 RFC 6265 的值. 默认为 true .

    • passThrough - 用于代理插件 (例如 h2o2 ).

返回值: none.

State 默认可以通过 server.options.state 配置选项修改.

const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

// Set cookie definition

server.state('session', {
  ttl: 24 * 60 * 60 * 1000,   // One day
  isSecure: true,
  path: '/',
  encoding: 'base64json'
});

// Set state in route handler

const handler = function (request, h) {

  let session = request.state.session;
  if (!session) {
    session = { user: 'joe' };
  }

  session.last = Date.now();

  return h.response('Success').state('session', session);
};

注册的 cookie 在收到时会自动解析。 解析规则取决于路由 state.parse 配置。 如果传入的已注册 cookie 无法解析,它不会包含在 request.state 中, 无论 state.failAction 的设置. 当 state.failAction 设置为 'log' 并且接收到不可用的 cookies 时, 服务器将触发 'request' event . 要捕获这些错误,请在 channels 'internal' 上注册 'request' 事件,并过滤 'error''state' 标签:

const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

server.events.on({ name: 'request', channels: 'internal' }, (request, event, tags) => {

  if (tags.error && tags.state) {
    console.error(event);
  }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文