Session Reuse, forceRefresh, and URL Parameters
The WebSDK includes built-in logic to reuse an existing stream session whenever possible. This behavior is especially important in single-page applications and frontend frameworks where initialization code may run multiple times due to re-renders, remounts, or route changes.
Understanding how session reuse, forceRefresh, clearSessionId(), and URL query parameters such as ?noSession work together is important when deciding whether the SDK should:
reconnect to an existing session
reuse existing SDK objects
create a fresh session
ignore previously stored session state
Two Different Layers of Reuse
There are two separate but related concepts involved:
SDK object reuse
Previously created Config, PixelStreaming, and Application objects
Session reuse
Previously known streaming session ID
These two layers are related, but they are not the same.
1. SDK Object Reuse
When using ArcwareInit, the SDK protects your application from unintentionally creating multiple instances of:
ArcwareConfigArcwarePixelStreamingArcwareApplication
This is particularly useful in frameworks like:
React
Vue
Angular
Svelte
where component lifecycle behavior can cause initialization code to run more than once.
By default, repeated calls to ArcwareInit(...) return the already existing SDK objects instead of creating fresh ones.
Example:
If the SDK was already initialized before, this call may return the existing objects.
2. Session Reuse
In addition to object reuse, the SDK can also reuse a previously known session ID.
This means that even if the connection is interrupted or the page is reloaded, the SDK may attempt to reconnect to the same stream session instead of starting a new one.
This behavior is useful for:
reconnect flows
page reloads
temporary network interruptions
preserving stream state
forceRefresh
The third parameter of ArcwareInit is:
If forceRefresh is set to true, the SDK creates fresh SDK objects instead of reusing previous ones.
Example:
This affects SDK object reuse, not necessarily session reuse.
That means:
new
Config,PixelStreaming, andApplicationobjects are createdbut a previous session may still be reused unless session reuse is also disabled
What forceRefresh Does
forceRefresh: false
Reuse existing SDK objects if available
forceRefresh: true
Always create new SDK objects
What forceRefresh Does Not Do
forceRefresh does not automatically guarantee a fresh backend session.
If a previous session ID is still available and allowed to be reused, the new SDK objects may still reconnect to that session.
clearSessionId
The SDK also exposes a method to explicitly remove the stored session ID in code:
This affects session reuse, not object reuse.
After calling clearSessionId(), the SDK will no longer be able to restore the previously stored session automatically.
Typical use cases:
force a clean new session from application code
logout or reset flows
"start over" buttons
testing clean startup behavior without relying on URL parameters
Example:
This is the code-based equivalent of disabling reuse of the stored session.
?noSession
The URL parameter:
tells the SDK to start without reusing a previously stored session.
This affects session reuse, not object reuse.
When ?noSession is present, the SDK should behave as if no previous session exists.
Typical use cases:
always start a fresh instance
debugging clean startup behavior
avoiding reconnect into previous state
explicit new-user or new-run flows
Example:
This parameter is only interpreted when:
is enabled.
How forceRefresh, clearSessionId, and ?noSession Work Together
These mechanisms affect different layers:
forceRefresh
✔
✖
clearSessionId()
✖
✔
?noSession
✖
✔
This means they can be combined.
Example Scenarios
Reuse everything
No ?noSession
Result:
existing SDK objects may be reused
existing session may be reused
Fresh SDK objects, but same session may still be reused
No ?noSession
Result:
new SDK objects are created
previous session may still be reused
Same SDK objects, but do not reuse previous session
URL:
Result:
existing SDK objects may still be reused
previous session is not reused
Fresh session by code
Result:
existing SDK objects may still be reused
previous stored session is removed and cannot be reused
Fully fresh start by code
Result:
new SDK objects are created
previous stored session is removed and cannot be reused
Fully fresh start by URL
URL:
Result:
new SDK objects are created
previous session is not reused
This is the closest behavior to a completely clean new start without calling clearSessionId() manually.
reconnect
The query parameter:
indicates that the SDK should attempt to reconnect to a previous session if one is known.
This is effectively the opposite intent of ?noSession.
Example:
If both reconnect behavior and previous session information are available, the SDK will attempt to restore the existing session.
?session=
The URL parameter:
explicitly provides the session ID that should be used.
Example:
This is the most explicit form of session reuse because the session is not merely restored from storage — it is directly specified in the URL.
Precedence and Intent
The mechanics can be understood by separating the two decision layers.
SDK Object Layer
Question:
Should the SDK reuse previously created objects or create fresh ones?
Controlled by:
forceRefresh
Session Layer
Question:
Should the stream reuse a previous session or start fresh?
Influenced by:
stored session state
clearSessionId()?reconnect?session=<id>?noSession
Practical Interpretation
In practice, the intent of these options is usually:
default initialization
reuse what already exists
forceRefresh: true
rebuild SDK objects
clearSessionId()
remove stored session so a fresh session is started
?noSession
do not restore previous session
?reconnect
try to restore previous session
?session=<id>
use this exact session
Recommended Usage Patterns
Typical SPA Integration
Use the default behavior.
This avoids accidental duplicate stream creation and allows normal reconnect behavior.
Clean New Session for Testing
Use either:
forceRefresh: truetogether with?noSession
or
ArcwarePixelStreaming.clearSessionId()together withforceRefresh: true
This prevents both object reuse and session reuse.
Explicit Reconnect Flow
Use:
default
forceRefresh?reconnect
This is useful when the application wants to guide the user back into an interrupted session.
Explicit Session Restore
Use:
?session=<id>
This is useful when session state is managed outside the SDK and passed into the application explicitly.
CoreSetup
CoreSetup does not create the UI layer, but session-related URL behavior still applies when URL parameters are enabled through configuration.
The same distinction remains:
object creation is controlled by how and when
CoreSetupis calledsession reuse is controlled by stored session state,
clearSessionId(), and URL parameters
Because CoreSetup is headless, lifecycle and reconnect behavior are typically managed more explicitly by the application.
Summary
default ArcwareInit behavior
reuse SDK objects and possibly reuse session
forceRefresh
rebuild SDK objects
clearSessionId()
remove stored session
?noSession
disable session reuse
?reconnect
prefer reconnecting to previous session
?session=<id>
force a specific session
A fully fresh start usually requires both:
fresh SDK objects
no previous session reuse
That can be achieved by combining:
with either:
or:
Last updated