aim_server_cookie 0.0.1
aim_server_cookie: ^0.0.1 copied to clipboard
Cookie support for Aim framework with secure options like HttpOnly, SameSite, and expiration.
aim_server_cookie #
Cookie support for the aim_server framework.
Overview #
aim_server_cookie provides secure cookie management for the Aim framework. This package offers an easy-to-use API for setting, deleting, and managing HTTP cookies with support for all standard cookie attributes including HttpOnly, Secure, SameSite, and expiration controls.
Features #
- 🍪 Simple Cookie API - Easy
setCookieanddeleteCookiemethods - 🔒 Security Options - Full support for HttpOnly, Secure, and SameSite attributes
- ⏰ Expiration Control - Set expiration with Max-Age or Expires
- 🌐 Path & Domain - Control cookie scope with path and domain options
- 🎯 Type-safe - Full Dart type safety with
CookieOptions - 📦 Multiple Cookies - Set multiple cookies in a single response
Installation #
Add aim_server_cookie to your pubspec.yaml:
dependencies:
aim_server: <latest_version>
aim_server_cookie: <latest_version>
Then run:
dart pub get
Usage #
Basic Cookie #
Set a simple cookie:
import 'package:aim_server/aim_server.dart';
import 'package:aim_server_cookie/aim_server_cookie.dart';
void main() async {
final app = Aim();
app.get('/login', (c) async {
c.setCookie('user_id', '12345');
return c.json({'status': 'logged in'});
});
await app.serve(host: InternetAddress.anyIPv4, port: 8080);
}
Secure Session Cookie #
Set a secure session cookie with HttpOnly and SameSite:
app.get('/login', (c) async {
c.setCookie('session_id', 'abc123xyz', options: CookieOptions(
httpOnly: true,
secure: true,
sameSite: SameSite.strict,
path: '/',
));
return c.json({'status': 'logged in'});
});
Cookie with Expiration #
Set a cookie that expires after a specific duration:
app.get('/remember', (c) async {
c.setCookie('remember_token', 'xyz789', options: CookieOptions(
maxAge: Duration(days: 30),
path: '/',
httpOnly: true,
));
return c.json({'status': 'remembered'});
});
Multiple Cookies #
Set multiple cookies in a single response:
app.get('/preferences', (c) async {
c.setCookie('theme', 'dark', options: CookieOptions(
path: '/',
maxAge: Duration(days: 365),
));
c.setCookie('language', 'ja', options: CookieOptions(
path: '/',
maxAge: Duration(days: 365),
));
return c.json({'status': 'preferences saved'});
});
Delete Cookie #
Delete a cookie by setting its Max-Age to 0:
app.get('/logout', (c) async {
c.deleteCookie('session_id', path: '/');
return c.json({'status': 'logged out'});
});
Important: When deleting a cookie, you must specify the same path and domain that were used when setting the cookie.
Complete Example #
import 'dart:io';
import 'package:aim_server/aim_server.dart';
import 'package:aim_server_cookie/aim_server_cookie.dart';
void main() async {
final app = Aim();
// Login endpoint - set secure session cookie
app.post('/login', (c) async {
final body = await c.req.json();
// Validate credentials...
c.setCookie('session_id', 'generated_session_id', options: CookieOptions(
httpOnly: true,
secure: true,
sameSite: SameSite.strict,
path: '/',
maxAge: Duration(hours: 24),
));
return c.json({'status': 'success'});
});
// Logout endpoint - delete session cookie
app.post('/logout', (c) async {
c.deleteCookie('session_id', path: '/');
return c.json({'status': 'logged out'});
});
// Protected endpoint - read cookies
app.get('/profile', (c) async {
final cookies = c.headers['cookie'] ?? '';
// Parse and validate session cookie...
return c.json({'user': 'data'});
});
await app.serve(host: InternetAddress.anyIPv4, port: 8080);
print('Server running on http://localhost:8080');
}
API Reference #
setCookie(String name, String value, {CookieOptions? options}) #
Sets a cookie in the response.
Parameters:
name- Cookie namevalue- Cookie valueoptions(optional) - Cookie configuration options
Example:
c.setCookie('user_id', '12345', options: CookieOptions(
path: '/',
maxAge: Duration(days: 7),
));
deleteCookie(String name, {String? path, String? domain}) #
Deletes a cookie by setting its Max-Age to 0.
Parameters:
name- Cookie name to deletepath(optional) - Cookie path (must match the path used when setting the cookie)domain(optional) - Cookie domain (must match the domain used when setting the cookie)
Example:
c.deleteCookie('user_id', path: '/');
CookieOptions #
Configuration options for cookies.
Properties:
-
path(String?, default:null)- The path for which the cookie is valid
- Example:
'/','/api'
-
domain(String?, default:null)- The domain for which the cookie is valid
- Example:
'example.com','.example.com'
-
maxAge(Duration?, default:null)- How long the cookie should be valid
- Example:
Duration(days: 7),Duration(hours: 1)
-
expires(DateTime?, default:null)- Absolute expiration date for the cookie
- Example:
DateTime.now().add(Duration(days: 30))
-
secure(bool?, default:null)- Whether the cookie should only be sent over HTTPS
- Set to
truefor production environments
-
httpOnly(bool?, default:null)- Whether the cookie is inaccessible to JavaScript
- Set to
truefor session cookies to prevent XSS attacks
-
sameSite(SameSite?, default:null)- Controls whether the cookie is sent with cross-site requests
- Values:
SameSite.strict,SameSite.lax,SameSite.none
SameSite Enum #
Controls cross-site cookie behavior:
SameSite.strict- Cookie is only sent in first-party contextSameSite.lax- Cookie is sent with top-level navigationsSameSite.none- Cookie is sent in all contexts (requiresSecureflag)
Security Best Practices #
-
Use HttpOnly for session cookies - Prevents XSS attacks
c.setCookie('session', 'value', options: CookieOptions(httpOnly: true)); -
Use Secure in production - Ensures cookies are only sent over HTTPS
c.setCookie('session', 'value', options: CookieOptions(secure: true)); -
Set SameSite attribute - Prevents CSRF attacks
c.setCookie('session', 'value', options: CookieOptions( sameSite: SameSite.strict, )); -
Specify Path - Limit cookie scope
c.setCookie('api_token', 'value', options: CookieOptions(path: '/api')); -
Set expiration - Don't create permanent cookies unnecessarily
c.setCookie('temp', 'value', options: CookieOptions( maxAge: Duration(hours: 1), ));
How It Works #
The cookie middleware:
- Sets cookies via the
set-cookieHTTP header - Supports multiple cookies by concatenating them with newlines
- Server-side splitting automatically splits concatenated cookies into individual
Set-Cookieheaders - Formats attributes according to HTTP cookie specification (RFC 6265)
Contributing #
Contributions are welcome! Please see the main repository for contribution guidelines.
License #
See the LICENSE file in the main repository.