کوکیها و Sessionها
فینچ API هایی جداگانه برای کوکیهای سمت کلاینت و sessionهای سمت سرور ارائه میدهد.
کوکیها
کوکیها در مرورگر کاربر ذخیره میشوند.
خواندن کوکی
var theme = rq.getCookie('theme', def: 'light');
تنظیم کوکی
// کوکی plain-text (safe: false)
rq.addCookie('theme', 'dark', safe: false);
// کوکی رمزگذاریشده (safe: true)
rq.addCookie('user_id', user.id.toString(), safe: true);
پارامتر safe کوکی را با cookiePassword از FinchConfigs رمزگذاری میکند.
حذف کوکی
rq.removeCookie('theme');
مثال کامل
Future<String> setTheme() async {
var theme = rq.get<String>('theme', def: 'light');
rq.addCookie('theme', theme, safe: false);
return rq.redirect(url: '/settings');
}
Sessionها
Sessionها در سمت سرور ذخیره میشوند (فینچ یک کوکی رمزگذاریشده برای نگهداشتن Session ID استفاده میکند).
خواندن Session
var userId = rq.getSession('userId', def: '');
نوشتن Session
rq.addSession('userId', user.id);
rq.addSession('role', 'admin');
حذف Session
rq.removeSession('userId');
پاک کردن تمام Sessionها
rq.clearSession();
مثال: ورود / خروج
// ورود
Future<String> login() async {
var email = rq.get<String>('email', def: '');
var password = rq.get<String>('password', def: '');
var user = await UserModel().findByCredentials(email, password);
if (user == null) {
return rq.renderView(path: 'auth/login', params: {'error': 'اعتبارنامه نامعتبر'});
}
rq.addSession('userId', user.id);
return rq.redirect(url: '/dashboard');
}
// خروج
Future<String> logout() async {
rq.clearSession();
return rq.redirect(url: '/login');
}
کوکیهای رمزگذاریشده
زمانی که safe: true استفاده میکنید، مقدار کوکی با cookiePassword که در FinchConfigs تعریف شده رمزگذاری میشود. همیشه از یک password قوی و منحصربهفرد در محیط production استفاده کنید:
FinchConfigs(
cookiePassword: env['COOKIE_PASSWORD'] ?? 'change-me-in-production',
)