GitHub

Session Management

TinyMVC provides comprehensive session management through the Session class, offering methods to store, retrieve, check, and delete session variables, as well as regenerate and destroy sessions.

Basic Usage

// Get session instance
$session = session();

// Store data in session
$session->set('user_id', 123);
$session->set('username', 'john_doe');

// Retrieve data from session
$userId = $session->get('user_id');
$username = $session->get('username', 'guest'); // with default value

// Check if session key exists
if ($session->has('user_id')) {
    // User is logged in
}

// Remove session data
$session->delete('username');

Flash Messages

Flash messages are temporary session data that persist only until the next request.

// Set flash message
$session->flash('success', 'Your changes have been saved!');
$session->flash('error', 'Please fix the errors below.');

// Retrieve flash messages (automatically cleared after retrieval)
$successMessage = $session->getFlash('success');
$errorMessage = $session->getFlash('error', 'No errors found.');

// Check if flash message exists
if ($session->hasFlash('success')) {
    // Display success message
}

// Clear all flash messages
$session->clearFlash();

Session Security

// Regenerate session ID (prevents session fixation attacks)
$session->regenerate(true); // true = delete old session

// Get current session ID
$sessionId = $session->id();

// Destroy session (log out user)
$session->destroy();

Advanced Session Operations

// Get all session data
$allSessionData = $session->all();

// Close session early (writes data to storage)
$session->close();

// Check if session is active
if (session()->isStarted()) {
    // Session is active
}

Dependency Injection

public function updateProfile(Request $request, Session $session)
{
    $userData = $request->validate([...]);
    
    // Store success message in flash session
    $session->flash('success', 'Profile updated successfully!');
    
    return redirect('/profile');
}

Security Best Practices

  • Always regenerate session ID after login to prevent session fixation
  • Store minimal sensitive data in sessions
  • Set appropriate session cookie parameters (secure, httponly, samesite)
  • Implement proper session expiration policies
  • Destroy sessions completely on logout

Full Examples

User Authentication Workflow

public function login(Request $request, Session $session)
{
    $credentials = $request->only('email', 'password');
    
    if (Auth::attempt($credentials)) {
        // Regenerate session to prevent fixation
        $session->regenerate(true);
        
        // Store user data in session
        $session->set('user_id', Auth::id());
        $session->set('user_role', Auth::user('role'));
        
        // Set welcome message
        $session->flash('success', 'Welcome back!');
        
        return redirect('/dashboard');
    }
    
    $session->flash('error', 'Invalid credentials');
    return back()->withInput();
}

public function logout(Session $session)
{
    // Destroy session completely
    $session->destroy();
    
    return redirect('/login');
}

Form Submission with Flash Messages

public function storeContactForm(Request $request, Session $session)
{
    $validated = $request->validate([
        'name' => 'required',
        'email' => 'required|email',
        'message' => 'required'
    ]);
    
    // Save to database
    Contact::create($validated);
    
    // Set success message
    $session->flash('success', 'Your message has been sent!');
    
    return redirect('/contact');
}

// In your view template:
@if (session()->hasFlash('success'))
    <div class="alert alert-success">
        {{ session()->getFlash('success') }}
    </div>
@endif