# Application Sessions

> Analyze user journeys, session duration, and engagement patterns to understand how users navigate through your application.

Source: https://last9.io/docs/discover-applications-sessions/

![Applications Sessions](../../../../../assets/content/docs/discover/applications/sessions/sessions.png)

Analyze user journeys, session duration, and engagement patterns to understand how users navigate through your application.

The Sessions tab in [Discover > Applications](https://app.last9.io/applications) provides detailed insights into user behavior patterns, session duration, and navigation paths. Understand how users interact with your application and identify drop-off points or problematic user flows.

## Understanding Sessions and Views

### What is a Session?

A session represents a period of continuous user activity. The scoping rules differ by platform:

**Web**

- **Tab-based**: each browser tab creates a separate session, even for the same user
- **Maximum duration**: sessions automatically end after 4 hours. If a user is actively browsing when the 4-hour limit is reached, a new session begins automatically
- **Independent tracking**: multiple tabs from the same user are tracked as separate sessions

**Mobile**

- **App-install-based**: one session per app install at a time — not per tab. Multiple app launches within the idle window join the same session.
- **Idle timeout**: sessions roll over when the app stays backgrounded past the SDK's idle threshold
- **Maximum duration**: sessions also roll over when they exceed the configured max duration, matching web behavior

### What is a View?

A view represents a discrete user-facing screen within a session.

**Web**

- A view is a page load. Only actual page navigation creates new views — query parameter changes (e.g. `/products?category=shoes` → `/products?category=shirts`) do not create new views.

**Mobile**

- A view is a screen transition: Activity lifecycle on Android, view-controller lifecycle on iOS, `NavigatorObserver` push on Flutter, React Navigation state change on React Native. Screen name comes from the SDK's automatic tracking or an explicit `startView(name)` call.

## Accessing Session Analysis

    1. Navigate to [Discover > Applications](https://app.last9.io/applications) in Last9
    2. Click the **Sessions** tab
    3. Choose your version and environment version from the top filters
    4. Set your desired time range using the date picker

## Session Overview Table

The main interface displays a list of user sessions with key metrics:

- **Session Start Time**: when the session began
- **Session ID**: unique identifier
- **User**: user associated with the session (set via `identify()`)
- **Duration**: total time from session start to last activity
- **Views**: pages viewed (web) or screens opened (mobile)
- **Views with Errors**: count of views that experienced errors
- **First / Last** — the entry and exit point of the session:
  - **Web**: URL path (`path` attribute)
  - **Mobile**: screen name (`view.name` attribute)

This table helps identify long-duration (engaged) sessions, short (bounce) sessions, error-prone sessions, and common entry/exit patterns.

Custom attributes added via `L9RUM.spanAttributes()` (web) or `L9Rum.spanAttributes()` (mobile) become available as filters for isolating sessions by organization, workspace, or other business dimensions.

## Individual Session Details

Click on any session to view detailed information about the user's journey:

### Session Metadata

Each session provides context appropriate to its platform:

**Web**

- **Browser**: Chrome, Firefox, Safari, etc.
- **Operating System**: macOS, Windows, Linux, iOS, Android (browser platform)
- **IP Address**: user's network location
- **Geolocation**: country, region, city (when available)
- **Session Duration**: total time from first to last page view

**Mobile**

- **OS**: Android / iOS name and version
- **Device**: brand and model (e.g. Samsung Galaxy S23, iPhone 15 Pro)
- **App Version**: release version the user was on
- **Network Type**: WiFi, cellular, offline
- **Session Duration**: total time from session start to last activity

### Page View Timeline

See the complete user journey with:

- **Timestamp**: Exact time of each page view
- **Errors**: Number of errors encountered on each page
- **Event Type**: View events and navigation patterns

The session detail view provides two filtering tabs for analyzing the timeline:

- **All Views**: Shows every page view in the session, including both successful and error views (indicated by the number badge showing total views)
  ![Applications Sessions — All Views](../../../../../assets/content/docs/discover/applications/sessions/sessions-all-views.png)
- **Views with Errors**: Filters to show only the page views that experienced errors (indicated by the number badge showing error count), helping you focus on problematic interactions
  ![Applications Sessions — Views with Errors](../../../../../assets/content/docs/discover/applications/sessions/sessions-views-with-errors.png)

### View Details Panel

Click on any view within a session to see per-view detail.

**Web view details**

- **View Information**: view ID, time spent, query parameters
- **Page Attributes**: host, path
- **Browser Attributes**: screen width/height, browser name and version, OS platform, touch support, network type, user agent
- **Web Vitals**: TTFB, LCP, FCP, CLS (per-view values)

**Mobile view (screen) details**

- **View Information**: view ID, time spent on screen, screen name
- **App Attributes**: app version, build ID, installation ID
- **Device Attributes**: OS name and version, device brand and model, network type
- **Screen Load Time**: duration from navigation intent to first frame (see [Performance — Mobile Vitals](/docs/discover-applications-performance/#mobile-vitals-mobile-only))

### Backend Trace Correlation

Every outgoing HTTP request from the SDK includes a W3C `traceparent` header so the backend span shares a traceId with the client. The session timeline surfaces these trace links, letting you:

- Follow requests end-to-end from client to backend services
- Identify whether delays come from client, network, or backend
- Verify trace headers are being sent to the correct services

Configuration per platform:

- **Web** — enable `network.backendCorrelation`. See [Web RUM SDK — Backend Trace Correlation](/docs/real-user-monitoring/web/#backend-trace-correlation).
- **Mobile** — `networkInstrumentation: true` is sufficient; `traceparent` is injected automatically by the OkHttp interceptor (Android), URLProtocol (iOS), fetch/XHR wrapper (React Native), or HttpOverrides (Flutter). Session ID propagation requires enabling `baggage` — see the [Session Correlation](/docs/discover-applications-session-correlation/) doc.

### Custom Events in Timeline

Events tracked with `L9RUM.addEvent()` (web) or `L9Rum.addEvent()` (mobile) appear in the session timeline alongside views and errors. Events automatically include session and view context, helping you understand how user actions relate to performance and error patterns.

**Searchable Event Attributes:**

Custom event attributes are fully searchable, enabling you to filter sessions based on specific event data. For example:

- **E-commerce**: Filter by `attributes['merchant_id']`, `attributes['cart_value']`, or `attributes['payment_method']`
- **SaaS Applications**: Search by `attributes['workspace_id']`, `attributes['feature_flag']`, or `attributes['subscription_tier']`
- **Content Platforms**: Query using `attributes['content_id']`, `attributes['category']`, or `attributes['user_role']`

This eliminates the need to emit duplicate log entries for custom event searchability—query span events directly in the RUM interface.

## Filtering and Search

Use the search functionality to filter sessions by:

**Path Filtering:**

- Sessions that visited specific pages
- Entry or exit path patterns
- Navigation through particular flows

**Attribute Filtering:**

- Browser or device type
- Network conditions
- Geographic regions (country, city, etc.)
- Business dimensions via `L9RUM.spanAttributes()` (tenant, workspace, feature flags)
- **Custom event attributes** from `L9RUM.addEvent()` (e.g., `attributes['merchant_id']`, `attributes['path']`, custom business metrics)
- Session duration ranges
- Error counts

**Time-Based Filtering:**

- Sessions within specific time windows
- Peak usage periods
- Post-deployment sessions
- Maintenance window impacts

## Best Practices

- **Track Critical User Journeys**: Monitor important conversion flows and business-critical paths
- **Investigate High-Error Sessions**: Sessions with multiple errors often reveal systemic issues
- **Analyze Bounce Patterns**: Short sessions with single page views might indicate problems
- **Monitor Engagement Metrics**: Track average session duration and pages per session trends
- **Correlate with Performance**: Compare session quality with Web Vitals performance
- **Regular Pattern Review**: Check session patterns weekly for unusual behavior or trends
- **User Experience Validation**: Use session data to validate UX design decisions
- **Maintain Context**: Refresh `L9RUM.spanAttributes()` on route changes so filters stay accurate

---

## Troubleshooting

- **Custom events not appearing?** Confirm `L9RUM.addEvent()` is called after SDK initialization and event names are non-empty.
- **Trace links missing?** Verify `network.backendCorrelation.enabled` is `true` and target APIs accept trace headers (check DevTools for CORS issues).
- **Missing geolocation data?** The SDK enriches data when the GeoJS service is reachable. Network restrictions may prevent enrichment.

Please get in touch with us on [Discord](https://discord.com/invite/Q3p2EEucx9) or [Email](mailto:support@last9.io) if you have any questions.
