如何在 Node.js 中正确处理 Cookie 和 Session

阅读时长 6 分钟读完

在 Web 应用程序中,Cookie 和 Session 是维护用户状态的重要机制。Cookie 是一段文本信息,由服务器发送给客户端浏览器,存储在用户的计算机上,用于在用户访问同一网站时发送回服务器。Session 则是一种在服务器端维护的数据结构,用于存储用户登录信息、购物车内容等状态信息。在 Node.js 中,处理 Cookie 和 Session 非常简单,本文将详细介绍如何正确处理 Cookie 和 Session。

Cookie

发送 Cookie 到客户端

在 Node.js 中,使用 http 模块的 response 对象来发送 Cookie:

其中,第一个参数为 Set-Cookie,第二个参数为一个数组,用于指定多个 Cookie。每个 Cookie 都是一个字符串,格式如下:

其中,name 为 Cookie 名称,value 为 Cookie 值,expires 为过期时间,path 为 Cookie 路径。例如:

上面代码中,将一个名为 name 的 Cookie 发送给客户端,设定其值为 value,过期时间为当前时间一小时后,路径为根目录。

读取客户端发送的 Cookie

在 Node.js 中,使用 http 模块的 request 对象来读取客户端发送的 Cookie:

读取的结果是一个字符串,多个 Cookie 之间用分号和空格(; )分隔。例如:

可选属性

除了 namevalueexpirespath,Cookie 还支持以下可选属性:

  • domain:指定 Cookie 可用的域名,默认为当前域名;
  • secure:指定只有通过 HTTPS 协议传输的 Cookie 才会发送到服务器;
  • HttpOnly:指定只有通过 HTTP 或 HTTPS 协议传输的 Cookie 才会发送到服务器,不能通过 JavaScript 脚本访问,可以有效防止跨站脚本攻击(XSS)。

示例代码:

Session

发送 Session 到客户端

在 Node.js 中,通常使用第三方库来处理 Session,例如 express-session。安装 express-session

然后,在应用程序中使用 express-session

-- -------------------- ---- -------
----- ------- - ---------------------------
----- --- - ----------

-----------------
  ------- --------- ----- -- ---- ------- -- ---
  ------- ------ -- ----------- -------
  ------------------ ------ -- --------- -------
  ------- - ------- ------ ------- -- - -- - ----- --------- ---- -- -- ------ --
----

上面代码中,secret 用于加密 Session ID,resavesaveUninitialized 用于控制 Session 的保存行为,cookie 用于设置Cookie。其中,securehttpOnly 分别对应 Cookie 的 secureHttpOnly 属性,maxAge 指定 Cookie 的过期时间。

在应用程序中,可以使用 req.session 访问 Session:

上面代码中,req.session 是一个对象,表示该用户的 Session。如果 req.session.views 存在,则访问次数加一,否则访问次数为 1。

读取客户端发送的 Session ID

在 Node.js 中,Session ID 默认被保存在 Cookie 中。读取客户端发送的 Session ID,只需要读取客户端发送的 Cookie,找到名为 connect.sid 的 Cookie 值即可。

示例代码:

-- -------------------- ---- -------
----- ------- - ------------------------------------
----- --- - -----------------------

-------- ------------------- -
  ----- ------- - ---
  -- --------- -
    ------ --------
  -
  -------------------------------- -- -
    ----- ----- ------ - -----------------------
    ------------ - --------------------------
  ---
  ------ --------
-

上面代码中,使用 parseCookie 函数解析客户端发送的 Cookie,sid 即为 Session ID。

总结

本文详细介绍了如何在 Node.js 中正确处理 Cookie 和 Session。对于 Cookie,可以通过发送和读取 Cookie,来存储和获取用户状态;对于 Session,可以使用 express-session 第三方库,在应用程序中方便地处理 Session。需要注意的是,Cookie 和 Session 都有安全性问题,需要仔细设置相关属性来保护用户隐私和防止攻击。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ddc3acf6b2d6eab39017c0

纠错
反馈