Proxy plans now up to 15% cheaper
View pricing

Sticky session not holding

Sticky proxy session keeps changing IP? Learn why sticky sessions drop and how to set the right session and time tags to hold one exit IP.

Tools & troubleshooting5 min readLast updated October 2026

If your sticky proxy session is not working (the exit IP keeps changing when you expected it to stay the same), the cause is almost always a username that is missing one of the two tags a sticky session requires. ColdProxy sticky sessions need both a session tag and a time tag together; supply only one and the proxy rotates per request. This page shows the broken-versus-fixed username, the error for an invalid session or time value, the duration limits per product, and the SuperPort alternative so you can hold a single exit IP for your plan's sticky window.

The one rule: session ID + time tag, together

A sticky session is defined by two tags in the username at once: a -session-<n> tag that names the session (its session ID), and a -time-<dur> tag that sets how long the IP is held. Present both and the session keeps the same exit IP for its time window while that IP works. If the exit IP stops working, the session's IP may change. Present only one (or neither) and the proxy rotates to a fresh IP on every request. Each value must also be valid, or the proxy refuses the request with an error; see Invalid session or time value.

Code
# BROKEN — only a session tag, no time tag -> rotates every request
user-key-myaccount-session-12345:PASSWORD

# FIXED — session AND time together -> 10-minute sticky session
user-key-myaccount-session-12345-time-10m:PASSWORD
Warning

The exact segment prefixes (for example the markers used for session and time) are configured per product by the admin. The grammar above is generic. Confirm the precise prefixes for your plan in your client area before hardcoding them.

Why a missing tag rotates

Rotating is the default behavior. Without an explicit session-plus-time pair, every request is treated as independent and gets the next available IP from the pool. That is exactly what you want for high-volume rotating workloads, but it breaks any flow that must keep the same IP across several requests: multi-step navigation, paginated collection from one origin, or a login that expects a stable source IP for an authorized session.

On Residential IPv6 and Datacenter IPv6, the client area's -identifier- pin is an alternative when you need the same IP without a timed window. Each generated identifier maps to one IP, with no stored session state. Use a session+time pair when you want a held window, and an identifier when you want the IP to stay the same. The Residential IPv4 plans do not support -identifier-, so use a session+time pair there.

Invalid session or time value (400 or 0x01)

The proxy refuses a request whose session or time tag has an invalid value. With HTTP or HTTPS, the response is 400 Bad Request; with SOCKS5, the reply is 0x01 (general failure). Your login was accepted, so this is not a credentials problem. Correct the tag and send the request again.

  • time must be a positive whole number, optionally followed by s, m, h, or d, for example 600, 600s, 10m, 1h, or 1d. An empty value, 0, a decimal such as 1.5h, or another unit such as 10min is refused. FOREVER is not a time value either, so -time-FOREVER is refused; on the IPv6 plans, the FOREVER hold comes from the client area's -identifier- username.
  • session must be digits only, for example 481516. An empty value or anything else, such as abc123, is refused.
Code
# REFUSED — "min" is not a time unit -> 400 Bad Request / SOCKS5 0x01
user-key-myaccount-session-12345-time-10min:PASSWORD

# REFUSED — the session ID contains letters -> 400 Bad Request / SOCKS5 0x01
user-key-myaccount-session-abc123-time-10m:PASSWORD

# FIXED — a digits-only session ID and a valid time
user-key-myaccount-session-12345-time-10m:PASSWORD
Note

Three cases are not errors: a valid session or time tag on its own rotates, as described above; a valid time above your plan's maximum is shortened to that maximum; and a time of 1 to 4 seconds is raised to 5 seconds (see the limits below).

Sticky duration limits per product

The maximum hold time depends on the product:

Sticky duration limits per product
Product Sticky range
Residential IPv4 (Unmetered) 5s to 24h
Residential IPv4 (GB Based) 5s to 24h
Residential IPv6 5s to FOREVER
Datacenter IPv6 5s to FOREVER
Note

On the two Residential IPv4 products, a time tag above 24h is shortened to 24h. On both IPv6 products you can hold an IP indefinitely with the client area's FOREVER option, which issues an -identifier- username; FOREVER is not a -time- value. The minimum on every product is 5 seconds: a shorter time, such as -time-2, is raised to 5 seconds.

Code
# Residential IPv4 — valid (within 24h)
user-key-job7-session-88-time-30m:PASSWORD

# Residential IPv4 — shortened to 24h (over the 24h ceiling)
user-key-job7-session-88-time-48h:PASSWORD

# IPv6 — long holds are allowed
user-key-job7-session-88-time-7d:PASSWORD

SuperPorts: sticky without per-request tags

If you authenticate by IP whitelist instead of user:pass, you cannot pass username tags, so use SuperPorts. SuperPorts bind a sticky duration (and geo) to specific port ranges at the plan level. Send traffic through a configured port range and every request inherits that sticky behavior automatically; this works under user:pass too, as the example below shows.

Example: bind ports 30000-31000 to a US exit with a 10-minute sticky window, then point your client at any port in that range:

Shell
curl -x "http://USERNAME:PASSWORD@gw-2312.coldproxy.com:30000" https://api.vipv6proxy.com/api/checker/my-ip
Tip

Username tags override SuperPort defaults. If a request through a sticky SuperPort still rotates, check that you have not also sent a username with conflicting (or incomplete) session/time tags on that request.

Confirm the IP is actually holding

Verify the fix empirically: send the same sticky username (or hit the same SuperPort) several times and confirm the exit IP is identical each time. Use the Proxy Checker for a quick read, or loop an IP-echo call from code.

Python
import requests

sticky = "http://user-key-job7-session-88-time-10m:PASSWORD@gw-2312.coldproxy.com:30000"
proxies = {"http": sticky, "https": sticky}

ips = {requests.get("https://api.vipv6proxy.com/api/checker/my-ip", proxies=proxies, timeout=30).json()["ip"] for _ in range(5)}
print("unique exit IPs:", ips)  # one IP while the session's exit IP works
Note

If the set still contains more than one IP, re-check that both the session and time tags are present and that the prefixes match your product configuration. For background on sticky versus rotating behavior, see IP rotation: rotating and sticky proxies explained and static vs rotating proxies.

Need a tailored proxy plan for a large project?

Need a different speed or traffic allowance? Contact us through the channels on our website so we can assess whether a custom plan is possible.

Contact Our Sales TeamTelegram & ticket support · English and Arabic