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
相关产品推荐
相关产品推荐

