

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用應用程式型 Cookie 的黏性工作階段
<a name="app-cookies-stickiness"></a>

當您搭配應用程式型 Cookie 使用 Application Load Balancer 時：
+ Application Load Balancer 使用[目標群組權重](https://aws.amazon.com/premiumsupport/knowledge-center/elb-make-weighted-target-groups-for-alb/)來判斷如何在目標群組之間平衡傳入流量。
+ 根據預設，Application Load Balancer 會使用循環配置方法來[將請求路由至目的地目標群組中的 EC2 執行個體](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)。
+ 流量最初路由至 EC2 執行個體後，EC2 執行個體應用程式回應應包含自訂應用程式 Cookie，該 Cookie 會與自動化 Application Load Balancer Cookie 一起傳回用戶端。
+ 如果用戶端傳送傳回應用程式 Cookie 和 Application Load Balancer Cookie，後續流量將黏附至 EC2 執行個體。
+ 以應用程式為基礎的 Cookie 在設定的持續時間不使用後過期。

**範本：**使用 CloudFormation 範本 `stickysessionsapp.yml`（包含在[範例程式碼 .zip 檔案中](samples/stickiness.zip)) 來嘗試使用應用程式型 Cookie 的黏性工作階段。

## 常用案例
<a name="app-cookies-use-cases"></a>

當您想要在這些案例中進行其他控制時，請使用黏性工作階段搭配應用程式產生的 Cookie：
+ PHP Web 伺服器
+ 維護臨時工作階段資料的伺服器，例如日誌、購物車或聊天對話

## 來自 basic.yml 的程式碼變更
<a name="app-cookies-code-changes"></a>

唯一的程式碼變更是在目標群組組態中。我們已將黏性組態新增至 Application Load Balancer 和目標群組屬性。應用程式 Cookie 持續時間已指定，目標群組已啟用應用程式 Cookie 黏性。



|  |  | 
| --- |--- |
| basic.yml | stickysessionsapp.yml | 
| <pre>TG1:<br />   Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />   Properties:<br />     Name: TG1<br />     Protocol: HTTP<br />     Port: 80<br />     TargetType: instance<br />     Targets:<br />       - Id: !Ref Instance1<br />       - Id: !Ref Instance2<br />VpcId: !Ref CustomVPC</pre> | <pre>TG1:<br />  Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />  Properties:<br />    Name: TG1<br />    Protocol: HTTP<br />    Port: 80<br />    TargetType: instance<br />    Targets:<br />      - Id: !Ref Instance1<br />      - Id: !Ref Instance2<br />    VpcId: !Ref CustomVPC<br />    TargetGroupAttributes:<br />      - Key: stickiness.enabled<br />        Value: true<br />      - Key: stickiness.type<br />        Value: app_cookie<br />      - Key: stickiness.app_cookie.duration_seconds<br />        Value: 10<br />      - Key: stickiness.app_cookie.cookie_name<br />        Value: TESTCOOKIE</pre> | 

## 步驟
<a name="app-cookies-steps"></a>

**備註**  
NAT 閘道會產生很小的成本。
多個 EC2 執行個體使用免費方案時數的速度會比單一 EC2 執行個體快。

1. 在`stickysessionslb.yml`實驗室環境中部署 CloudFormation 範本。

1. 等到目標群組執行個體的運作狀態從**初始**變更為**正常運作**。

1. 使用 HTTP (TCP/80) 導覽至 Web 瀏覽器中的 Application Load Balancer URL。

   例如：`http://alb-123456789.us-east-1.elb.amazonaws.com/`

   網頁會顯示下列其中一項：**執行個體 1 - TG1**、**執行個體 2 - TG1**、**執行個體 3 - TG2** 或**執行個體 4 - TG2**。

1. 多次重新整理頁面。

## 預期結果
<a name="app-cookies-results"></a>

**注意**  
此範例中的 CloudFormation 範本已將黏性設定為持續 10 秒。有效的黏性持續時間組態介於 1 秒到 1 週之間。

載入網頁的執行個體應保持不變，如頁面文字所示。

黏性持續時間不會重新整理，但是根據 EC2 執行個體所產生之應用程式 Cookie 在 Application Load Balancer 中設定的過期時間。

**範例 1：**等待 5 秒以重新整理頁面。將載入相同的執行個體，並再重新整理黏性 10 秒。

**範例 2：**等待超過 10 秒以重新載入頁面。應用程式 Cookie 會過期，而您會被路由到不同的 EC2 執行個體。這個新執行個體會產生另一個應用程式 Cookie，持續時間為 10 秒。

## 運作方式
<a name="app-cookies-how"></a>
+ 在此範例中，EC2 執行個體已安裝 Apache Web 伺服器 (`httpd`)。`httpd.conf` 檔案設定為將靜態`Set-Cookie`值傳回用戶端 （您的 Web 瀏覽器）。`Set-Cookie` 值硬式編碼為 `TESTCOOKIE=<somevalue>`。
+ 開啟瀏覽器的**檢查元素**選項，選擇**網路**索引標籤，然後選擇 **Get** 方法，以載入頁面。您將看到 **Cookie** 索引標籤。
+ 瀏覽器是一種用戶端應用程式，會自動設定 ，以使用伺服器`Set-Cookie`回應中收到的 Cookie 傳回任何後續更新至伺服器。
+ 當您重新載入頁面時，初始頁面載入中收到的 Cookie 會自動傳回 Application Load Balancer。
  + 如果 Cookie 已過期 （亦即，自上次呼叫後已經過 10 秒），Application Load Balancer 會使用新的邏輯來判斷要將流量路由到哪個 EC2 執行個體。
  + 如果 Cookie 尚未過期，Application Load Balancer 會將流量路由到相同的 EC2 執行個體。