Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Session Manager Laravel Package

jetiradoro/laravel-session-manager

Manage active user sessions in Laravel using the database session driver. View current connections, detect inactive sessions (e.g., 10+ minutes), and force logout or destroy old sessions via an admin page. Includes install command, migrations, and publishable config/routes.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation:

    composer require jetiradoro/laravel-session-manager
    php artisan session-manager:install
    
    • This sets up .env variables, migrations, and default configurations.
  2. First Use Case:

    • Access /admin/current-connections to view active sessions older than the configured inactivity threshold (default: 10 minutes).
    • No additional setup required for basic functionality.
  3. Prerequisites:

    • Ensure SESSION_DRIVER=database in .env (modified automatically during installation).
    • Verify SM_ROUTES=true in .env (enables default admin routes).

Implementation Patterns

Core Workflows

  1. Session Monitoring:

    • Automatically tracks user sessions via database (due to SESSION_DRIVER=database).
    • Use the /admin/current-connections route to list inactive sessions (configurable threshold in session-manager.php).
  2. Forced Logout:

    • Manually trigger logout via the admin interface for specific sessions.
    • Example: Iterate over sessions in a controller:
      use Jetiradoro\SessionManager\Facades\SessionManager;
      
      $sessions = SessionManager::getInactiveSessions(60); // 60 minutes
      foreach ($sessions as $session) {
          SessionManager::forceLogout($session->id);
      }
      
  3. Custom Routes:

    • Disable default routes by setting SM_ROUTES=false in .env.
    • Define custom routes in config/session-manager.php:
      'routes' => [
          'inactive_sessions' => 'admin.connections',
          'force_logout'      => 'admin.force-logout',
      ],
      
  4. Integration with Auth Events:

    • Listen for auth.logout or auth.login events to sync session data:
      use Jetiradoro\SessionManager\Events\SessionUpdated;
      
      Event::listen(SessionUpdated::class, function ($event) {
          // Custom logic (e.g., log session changes)
      });
      
  5. Frontend Integration:

    • The package includes Vue.js/Axios for the admin UI. Ensure app.js and dependencies are loaded in your layout:
      <script src="{{ mix('js/app.js') }}"></script>
      

Gotchas and Tips

Pitfalls

  1. Database Driver Requirement:

    • The package mandates SESSION_DRIVER=database. If using file/redis, sessions won’t be tracked.
    • Fix: Manually set SESSION_DRIVER=database in .env before installation.
  2. Route Conflicts:

    • Default routes (/admin/current-connections) may clash with existing admin routes.
    • Fix: Set SM_ROUTES=false and customize routes in config/session-manager.php.
  3. Vue.js Dependencies:

    • The admin UI relies on Vue.js and Axios. Missing these will break the frontend.
    • Fix: Ensure app.js includes Vue/Axios or manually add:
      <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js"></script>
      
  4. Session Cleanup:

    • Inactive sessions are not auto-deleted; they’re only flagged for manual review.
    • Tip: Schedule a cron job to purge old sessions via the facade:
      * * * * * php artisan session-manager:purge --minutes=30
      
  5. Configuration Overrides:

    • Published config (session-manager.php) may be overwritten during updates.
    • Tip: Use config('session-manager.key') to access values dynamically.

Debugging Tips

  1. Check Migrations:

    • Run php artisan migrate if sessions aren’t appearing in /admin/current-connections.
    • Verify the sessions table has the last_activity column.
  2. Log Session Events:

    • Enable debug mode in config/session-manager.php:
      'debug' => env('APP_DEBUG', false),
      
    • Check Laravel logs for session-related events.
  3. Axios Errors:

    • If the admin UI fails to load, inspect browser console for Axios errors.
    • Fix: Ensure CORS is configured if using APIs across subdomains.

Extension Points

  1. Custom Session Data:

    • Extend the sessions table by publishing migrations:
      php artisan vendor:publish --tag=migrations
      
    • Add fields like user_agent or ip_address to database/migrations/[timestamp]_add_session_metadata.php.
  2. Webhook Notifications:

    • Trigger external actions (e.g., Slack alerts) on session logout:
      Event::listen(SessionUpdated::class, function ($event) {
          if ($event->action === 'logout') {
              // Send webhook
          }
      });
      
  3. Multi-Tenant Support:

    • Filter sessions by tenant ID by extending the SessionManager facade:
      use Jetiradoro\SessionManager\Facades\SessionManager;
      
      $tenantId = Auth::user()->tenant_id;
      $sessions = SessionManager::getInactiveSessions(60, $tenantId);
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope