Files
leaudit-platform-frontend/app/utils/session.server.ts
T
2025-06-04 11:18:52 +08:00

53 lines
1.5 KiB
TypeScript

import { createCookieSessionStorage } from '@remix-run/node';
import { v4 as uuidv4 } from 'uuid';
import { difyUtils } from '../services/dify-client.server';
// 创建会话存储
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);
}
// 获取或创建会话信息
export async function getSessionInfo(request: Request) {
const session = await getSession(request);
let sessionId = session.get('sessionId');
if (!sessionId) {
sessionId = uuidv4();
session.set('sessionId', sessionId);
}
const user = difyUtils.generateUserId(sessionId);
return {
sessionId,
user,
session,
};
}
// 设置会话头部
export function setSessionHeaders(sessionId: string) {
return {
'Set-Cookie': `session_id=${sessionId}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${60 * 60 * 24 * 30}`,
};
}