Weave 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

Filament User Sessions Laravel Package

smony/filament-user-sessions

Filament plugin that lists every active user session—user, IP, parsed device and browser, last activity—with one-click and bulk revoke to force-logout anyone. Flags logins from new devices. Requires Laravel's database session driver.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is a thin read/admin layer over Laravel's native database session store — not a second session system, not a custom guard, not middleware in the request path. The shipped surface is a Filament page, a resource with revoke actions, a stat widget, a policy, a notification contract, and two migrations. For a TPM, that is the most defensible kind of dependency: bounded blast radius, no interception of authentication, and an obvious removal path. The cost is architectural coupling to one persistence choice: the plugin reads the sessions table directly, so SESSION_DRIVER=database is a hard prerequisite. Apps on Redis, file, cookie, or DynamoDB sessions cannot use it without first migrating their session store — an infrastructure change, not a composer require.

Integration feasibility. Genuinely small: require the package, ensure session:table migration exists, run php artisan migrate (also creates session_known_devices), register the plugin in the panel provider, optionally publish config. There is exactly one extension point of substance — ResolvesNewDeviceRecipients — plus the standard Laravel Gate::policy(Session::class, ...) override. A mid-level Laravel developer should land installation plus a restrictive policy in under a day, including staging verification.

Technical risk. Ranked:

  • Permissive default authorization. Out of the box, anyone who can reach the panel can view every session and revoke any of them (only their own current session is protected). The override works only because app providers boot after package providers — a fragile mechanism to reason about. A policy must ship in the same PR as the install, not "later".
  • Unverified revoke semantics. Deleting the session row logs the user out on the next request, but if remember_me is in use, Laravel's recaller cookie can silently re-authenticate the session. That is not equivalent to Auth::logoutOtherDevices() / AuthenticateSession, which invalidates via password-hash re-check. If this tool is being adopted to satisfy an access-revocation or incident-response control, that distinction must be tested and documented before anyone claims compliance.
  • No audit trail. The package does not record who revoked whom, or when. For a security-adjacent action, that is a control gap; you will need to wrap revocations in your own activity log.
  • Coarse device fingerprint, by design. Browser + platform only, deliberately not IP-based (documented, and a reasonable trade-off). Treat "New device" as a triage hint, never a detection signal — two physical devices reporting "Chrome on Windows" are indistinguishable.
  • Vendor concentration. Five stars, zero dependents, single maintainer, no commercial support, no visible external adoption. The code is small enough to read in an afternoon — do that before trusting it in an authentication-adjacent path.
  • Silent-empty failure mode. Wrong driver or renamed table yields an empty Sessions page rather than an error — a false sense of security that looks identical to "nobody is logged in".
  • Scale unknowns. No evidence of pagination, search, or filtering for panels with thousands of concurrent sessions; each row requires parsing the serialized payload.

Key questions. Does revoke invalidate remember-me cookies, or only the current session row? Is the plugin scoped per panel, or does it expose sessions across every guard and panel in the app? What happens with guest/anonymous sessions and multi-guard setups? Is there a retention or pruning policy for session_known_devices, which persists across logout and grows monotonically? Does the notification path fire on every login from a new fingerprint, and can it be rate-limited or routed to a queue? Which Laravel versions are actually in the CI matrix (README specifies Filament v4/v5 but is silent on Laravel)? What is the maintenance commitment from the maintainer — issue response times, security disclosure policy?

Integration Approach

Stack fit. Clean, provided you are already on Filament v4/v5 (Laravel 11/12 era) and already on database sessions. If you are on Filament v3, the pinned ^1.0 line means you are adopting a version the maintainer has stopped developing against — a signal to wait until the panel upgrade. If you are on Redis sessions, the honest answer is that this package is not the tool; either migrate session storage (with its own write-amplification and availability trade-offs) or handle sessions through your existing Redis tooling.

Migration path. Two distinct migrations to separate in planning: (1) the session driver change, if needed — this touches env config, the sessions table, and every request's write path, and deserves its own change with its own rollback; (2) the package install itself, which is additive and reversible via composer remove plus dropping session_known_devices. Do not bundle them.

Compatibility. Verify before committing: exact Laravel constraint in composer.json, whether sessions.user_id is populated in your setup (guest sessions and some custom guards leave it null, which degrades the listing), and whether your sessions table name is customized (configurable, but confirm). Check that your panel's navigation and authorization conventions align with a plugin-registered page.

Sequencing. (1) Read the source — it is small. (2) Install in staging against a copy of production's session data. (3) Write and register a restrictive SessionPolicy before the page is reachable by support or non-superadmin roles. (4) Add an activity-log wrapper around revoke actions. (5) Verify revoke behavior with remember_me enabled and with multiple open browsers. (6) Add a monitoring check that distinguishes "page renders with zero sessions" from "page failed to load" so the silent-empty mode gets caught. (7) Roll out to a superadmin-only role, then widen.

Operational Impact

Maintenance. Low ongoing code maintenance, non-trivial dependency maintenance. Pin to an exact version, subscribe to releases, and budget a review pass on each Filament major. The upgrade surface is small but so is the maintainer's capacity — the practical risk is abandonment, not churn. Keep the fallback in mind: the core capability (list sessions, delete rows, log the deletion) is a few hundred lines against your own schema, which caps the cost of an exit.

Support. Documentation is above average for a package this size — driver constraints, the authorization override, the fingerprint's limits, and the notification opt-in are all stated plainly, and the release notes flag required migrations and non-breaking changes. What is missing is any support channel: no commercial backing, no SLA, no stated security disclosure process. Treat it as community-supported software in a security-adjacent role.

Scaling. Two tables carry growth. sessions is bounded by Laravel's own lottery-based garbage collection plus your configured lifetime — no new burden. session_known_devices has no built-in retention and grows with users × distinct fingerprints, permanently; add a scheduled prune against your own retention policy (e.g., 180 days) or it becomes an unbounded table nobody owns. Payload parsing on the listing page is per-row work — validate performance at your peak concurrency before enabling for all admins, and confirm pagination exists.

Failure modes. Wrong or changed session driver → empty page, no error, operators conclude no one is logged in. Renamed sessions table without matching config → same. Revoke succeeds visually but the user returns via remember-me → incident responder believes an account is contained when it is not. Package page accessible to a broad admin role → a support-tier admin can log out a superadmin, deliberately or by misclick; bulk revoke makes the blast radius larger. Migration skipped on deploy → fatal error on the sessions page only, so it will surface late.

Ramp-up. A few hours for a developer, minutes for an admin using the UI. The real ramp-up cost is procedural, not technical: teaching responders what "Revoke" actually guarantees, and pairing it with password reset plus logoutOtherDevices() for true containment.

Verdict. Adopt narrowly and conditionally: as an operational convenience for superadmins inside an existing Filament panel already on database sessions, with a policy and an audit wrapper shipped together, and with remember-me behavior verified first. Do not adopt it as the sole mechanism for a compliance-mandated access-revocation control, and do not adopt it if it forces a session-driver migration you would not otherwise make.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package