pub struct SessionData {
pub session_id: String,
pub user_id: String,
pub created_at: DateTime<Utc>,
pub expires_at: DateTime<Utc>,
pub last_activity: DateTime<Utc>,
pub ip_address: Option<String>,
pub user_agent: Option<String>,
pub data: HashMap<String, Value>,
}Expand description
Session data stored in the backend.
All fields are public for serialization flexibility. When constructing
a new session prefer SessionData::new which initialises timestamps
consistently.
§Chainable construction
let session = SessionData::new("sess-1", "user-1", Duration::from_secs(3600))
.ip_address("127.0.0.1")
.user_agent("Mozilla/5.0")
.with_data("role", json!("admin"));The older SessionData::with_metadata helper sets both IP and
user-agent in a single call and remains available.
§Invariants (not enforced at the type level)
created_at <= last_activitycreated_at < expires_atlast_activityis updated on every authenticated access.datamay contain arbitrary application-specific key/value pairs — the framework never reads them.
Fields§
§session_id: StringSession ID
user_id: StringUser ID associated with this session
created_at: DateTime<Utc>When the session was created
expires_at: DateTime<Utc>When the session expires
last_activity: DateTime<Utc>Last activity timestamp
ip_address: Option<String>IP address of the session
user_agent: Option<String>User agent
data: HashMap<String, Value>Custom session data
Implementations§
Source§impl SessionData
impl SessionData
Sourcepub fn new(
session_id: impl Into<String>,
user_id: impl Into<String>,
expires_in: Duration,
) -> Self
pub fn new( session_id: impl Into<String>, user_id: impl Into<String>, expires_in: Duration, ) -> Self
Create a new session with consistent timestamps.
§Arguments
session_id- Unique session identifier (typically a UUID)user_id- Associated user IDexpires_in- Session lifetime from now
Use with_metadata to attach IP and
user-agent information after construction.
§Panics
If expires_in conversion to chrono::Duration fails catastrophically.
Sourcepub fn is_expired(&self) -> bool
pub fn is_expired(&self) -> bool
Check if the session has expired.
Sourcepub fn time_until_expiry(&self) -> Duration
pub fn time_until_expiry(&self) -> Duration
Return the remaining lifetime of this session.
Returns Duration::ZERO when the session
has already expired.
Sourcepub fn update_activity(&mut self)
pub fn update_activity(&mut self)
Update the last activity timestamp.
Sourcepub fn with_metadata(
self,
ip_address: Option<String>,
user_agent: Option<String>,
) -> Self
pub fn with_metadata( self, ip_address: Option<String>, user_agent: Option<String>, ) -> Self
Set session metadata (IP address and user-agent) in one call.
Sourcepub fn ip_address(self, ip: impl Into<String>) -> Self
pub fn ip_address(self, ip: impl Into<String>) -> Self
Set the client IP address.
Sourcepub fn user_agent(self, ua: impl Into<String>) -> Self
pub fn user_agent(self, ua: impl Into<String>) -> Self
Set the client user-agent string.
Sourcepub fn with_data(self, key: impl Into<String>, value: Value) -> Self
pub fn with_data(self, key: impl Into<String>, value: Value) -> Self
Add a custom data entry (chainable).
Trait Implementations§
Source§impl Clone for SessionData
impl Clone for SessionData
Source§fn clone(&self) -> SessionData
fn clone(&self) -> SessionData
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SessionData
impl Debug for SessionData
Source§impl<'de> Deserialize<'de> for SessionData
impl<'de> Deserialize<'de> for SessionData
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for SessionData
impl RefUnwindSafe for SessionData
impl Send for SessionData
impl Sync for SessionData
impl Unpin for SessionData
impl UnsafeUnpin for SessionData
impl UnwindSafe for SessionData
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more