You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

next-auth中useSession与getSession的区别是什么?

next-auth 中 useSession 和 getSession 的核心区别

二者虽然都能返回session对象,但在运行环境、调用方式、响应特性上有本质差异,具体如下:

1. 适用场景与运行环境

  • useSession 是React 客户端 Hook,仅能在浏览器端的 React 组件/自定义 Hook中运行,不可用于服务端逻辑、普通 JS 函数。在 Next.js App Router 中使用时,所在组件必须标注 'use client' 指令
  • getSession 是通用异步方法,同时支持浏览器端、服务端(getServerSideProps、API 路由、服务端组件等场景)调用

2. 调用方式与返回值特性

  • useSession 遵循 React Hook 调用规则,不需要 await 调用,返回包含三个属性的对象:
    • data:session 对象/undefined/null,对应会话的实际数据
    • status:包含 loading/authenticated/unauthenticated 三个枚举值,标识会话加载状态,无需自行处理异步加载逻辑
    • update:手动触发会话更新的方法
      示例代码:
    const { data: session, status } = useSession()
    if (status === 'loading') return <div>会话加载中</div>
    
  • getSession 是纯异步函数,必须配合 await 调用,直接返回 session 对象(登录状态)或 null(未登录状态),没有内置加载状态,需要自行处理异步等待逻辑。服务端调用时需要传入请求上下文,才能正确读取 Cookie 中的会话信息
    示例代码:
    // 客户端/服务端通用调用方式
    const session = await getSession(context)
    

3. 缓存与更新逻辑

  • useSession 共享全局会话缓存,同一应用内多个组件调用仅会发起一次会话校验请求,会话过期、更新时会自动同步到所有调用该 Hook 的组件,自带响应式更新能力
  • getSession 每次调用都会重新发起会话校验请求(无内置缓存),没有自动同步能力,会话变更后需要手动重新调用才能获取最新数据

4. 典型使用场景

  • 优先用 useSession:客户端组件需要根据登录状态渲染不同内容、需要监听会话变化动态更新 UI 的场景
  • 优先用 getSession:
    • 服务端渲染阶段(getServerSideProps)预先获取会话,避免客户端加载时的登录态闪屏
    • 服务端组件、API 路由中做权限校验、登录态判断
    • 客户端非组件的普通工具函数中需要获取会话的场景

内容的提问来源于stack exchange,提问作者Ishan Bassi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:15:04