使用者端狀態管理
Edge Network本身是無狀態的(不會維護自己的工作階段)。 但是,有些使用案例需要使用者端狀態持續性,例如:
- 一致的裝置識別
- 收集並強制執行使用者同意
- 保留個人化工作階段ID
Edge Network使用狀態管理通訊協定,將儲存方面委派給其使用者端/SDK,並在其回應中包含狀態專案。 對於瀏覽器,專案會儲存為Cookie。
使用者端的責任是儲存這些變數,並將其納入所有後續的請求。 使用者端也必須按照閘道的指示,注意專案是否到期。 當專案儲存為Cookie時,瀏覽器會自動執行所有這些工作。
雖然狀態專案一律具有純String值(呼叫者/SDK可看到),您不應該以任何方式使用或竄改值。 值結構/格式,甚至是名稱本身都可能隨時變更,這可能會導致內部使用狀態的使用者端出現未預期的行為。 此狀態旨在讓閘道本身或其他邊緣服務一律使用。
將使用者端狀態作為中繼資料保留
回應主體中Edge Network傳回的狀態是型別為Handle的state:store物件。
{
"requestId":"421036b3-a7ff-480b-a9ab-30adba6eb4f0",
"handle":[
{
"payload":[
{
"key":"kndctr_53A16ACB5CC1D3760A495C99_AdobeOrg_consent_check",
"value":"1",
"maxAge":7200,
"attrs":{
"SameSite":"None"
}
},
{
"key":"kndctr_53A16ACB5CC1D3760A495C99_AdobeOrg_identity",
"value":"CiY1NDc1ODIxNzIzODk5MDY5MzQzMTIzNjQ1NTczNzExNjE4OTA1MFINCLGOvszNLhABGAEgBKABsY6-zM0uqAGHz-z2y82cul3wAbGOvszNLg==",
"maxAge":34128000,
"attrs":{
"SameSite":"None"
}
},
{
"key":"kndctr_53A16ACB5CC1D3760A495C99_AdobeOrg_consent",
"value":"general=in",
"maxAge":15552000,
"attrs":{
"SameSite":"None"
}
}
],
"type":"state:store"
}
]
}
keyvaluemaxAgeattrsMap<String, String>SameSite屬性皆設為None。為了支援多重標籤(亦即相同屬性中的多個SDK執行個體,可能會參考不同的組織),所有狀態專案都會自動加上前置詞kndctr_和URL安全的組織ID。
使用者端SDK在回應中收到state:store控制代碼時,必須執行下列動作:
- 儲存使用者端專案,遵守閘道所提供的到期時間。
- 從使用者端存放區載入這些專案,並在後續請求中包含所有未過期的專案。
以下是以使用者端儲存狀態傳遞的請求範例:
{
"meta":{
"state":{
"entries":[
{
"key":"kndctr_53A16ACB5CC1D3760A495C99_AdobeOrg_consent_check",
"value":"1"
},
{
"key":"kndctr_53A16ACB5CC1D3760A495C99_AdobeOrg_personalization_sessionId",
"value":"0a88f43e-044b-41a6-a4f3-6c2848bbc672"
}
]
}
}
}
在瀏覽器Cookie中儲存使用者端狀態
使用瀏覽器使用者端時,Edge Network會自動將專案保留為瀏覽器Cookie。 這可提供透明狀態儲存支援,因為瀏覽器預設會遵守狀態管理通訊協定。
幾乎所有專案在啟用及支援時都會具體化為第一方Cookie (請參閱下面的附註),但是閘道也可以在使用第三方adobedc.demdex.net網域時儲存一些第三方Cookie。
由於專案依其定義一律繫結至特定範圍(裝置/應用程式),因此Edge Network只會寫入與目前請求內容相容的子集。 未寫入的專案為
在state:store控制代碼中傳回。
一般而言,應用程式範圍專案一律會寫入為第一方Cookie,而裝置範圍專案則會寫入為第三方Cookie。 此決定對於呼叫者完全透明,閘道會根據呼叫內容決定可以寫入哪些專案。
呼叫者必須透過meta.state.cookiesEnabled旗標明確啟用將使用者端狀態儲存為Cookie的支援:
{
"meta":{
"state":{
"cookiesEnabled":true,
"domain":"foo.com"
}
}
}
cookiesEnabledfalse。domaincookiesEnabled: true時需要。 應在其上寫入Cookie的頂層網域。 Edge Network將使用此值來決定是否可將狀態保留為Cookie。即使透過cookiesEnabled標幟啟用Cookie支援,Adobe Experience Platform Edge Network也只會在要求最上層網域符合呼叫者指定的domain時寫入狀態專案。 當有不相符的專案時,會在state:store控制代碼中傳回專案。
在下列情況下,無法寫入第一方Cookie (即使已啟用支援):
- 要求來自協力廠商
adobedc.demdex.net網域。 - 要求來自第一方
CNAME網域,不同於呼叫者在meta.state.domain中指定的網域。
Cookie安全性
所有Cookie都儘可能啟用安全旗標。
所有安全Cookie的SameSite屬性都設為None,這表示Cookie會在所有內容(第一方和跨來源)中傳送。
- 針對第一方Cookie (
kndcrt_*),Secure標幟只有在要求內容安全(HTTPS)且反向連結(Referer HTTP標頭)也是HTTPS時才設定。 如果反向連結不安全(HTTP),則會省略Secure標幟,以允許網頁SDK讀取它們。 無法從不安全的內容讀取安全的Cookie。 - 第三方Cookie (demdex)一律會設定
Secure標幟,因為所有要求都是HTTPS,因此要求內容是安全的,而且絕對不會從JavaScript讀取此Cookie。
Secure旗標不存在於Cookie的中繼資料表示中。 僅包含SameSite屬性。 在此情況下,只要有Secure屬性出現,使用者端有責任正確設定SameSite標幟。 具有SameSite=None的Cookie也必須指定Secure屬性,因為它們需要安全內容(HTTPS)。