53 lines
1.5 KiB
TypeScript
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}`,
|
|
};
|
|
}
|