import { createCookieSessionStorage } from '@remix-run/node'; import { v4 as uuidv4 } from 'uuid'; // 创建会话存储 const sessionStorage = createCookieSessionStorage({ cookie: { name: '__dify_session', httpOnly: true, path: '/', sameSite: 'lax', secrets: ['dify-chat-secret'], // 在生产环境中应该使用环境变量 secure: process.env.NODE_ENV === 'production', maxAge: 60 * 60 * 24 * 30, // 30天 }, }); // 获取会话 export async function getSession(request: Request) { const cookie = request.headers.get('Cookie'); return sessionStorage.getSession(cookie); } // 提交会话 export async function commitSession(session: any) { return sessionStorage.commitSession(session); } // 获取或创建会话信息 // 注意:user 字段已移除,现在由后端从 JWT 自动提取 username export async function getSessionInfo(request: Request) { const session = await getSession(request); let sessionId = session.get('sessionId'); if (!sessionId) { sessionId = uuidv4(); session.set('sessionId', sessionId); } return { sessionId, session, }; } // 设置会话头部 export function setSessionHeaders(sessionId: string) { return { 'Set-Cookie': `session_id=${sessionId}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${60 * 60 * 24 * 30}`, }; }