# 4. CORS 進階之 cookie 處理
#### 1. Set-Cookie
在這一篇文章[CORS進階之設置請求頭信息(三)](http://www.rails365.net/articles/cors-jin-jie-zhi-she-zhi-qing-qiu-tou-xin-xi-san)中,可以使用CORS來設置自定義的請求頭部信息,然而為了安全,默認情況下,瀏覽器的cookie也是不能作為信息傳遞給跨域的服務器的。
第一步,要做的是首先瀏覽器上有cookie。
第一步,是要測試把cookie發送給跨域的服務器。
先來完成第一步,設置cookies。
其實最簡單的是通過javascript來設置,不過這里介紹另一種方法:通過響應頭信息`Set-Cookie`來處理。
```
add_header 'Set-Cookie' 'name=value';
```
上面表示的是響應一個頭部信息叫`Set-Cookie`,瀏覽器得到它的值就會自動設置cookie信息的,鍵為`name`,值為`value`。
還是按照之前的例子,從localhost:3000跨域到nginx服務器localhost:8080。
先訪問一下localhost:8080這臺服務器。

現在在localhost這個域上就有`name=value`這樣的cookie信息了。
接著在localhost:3000上把這個cookie信息跨域發送給localhost:8080這臺nginx服務器。
#### 2. Access-Control-Allow-Credentials
要發送帶cookie的請求到跨域服務器中,只需要把`withCredentials`設為`true`即可。
```
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "http://localhost:8080", true);
xhttp.withCredentials = true
xhttp.send();
```
效果圖如下:

大體的意思是這樣,當`Access-Control-Allow-Origin`為`*`時,又把`withCredentials`設為了`true`,那是不被允許的。
我們先把`Access-Control-Allow-Origin`改為localhost:3000這臺機器。
```
add_header 'Access-Control-Allow-Origin' 'http://localhost:3000';
```
再重新發送跨域請求。

之前`Access-Control-Allow-Origin`為`*`的問題解決了,可是又出現了新的錯誤:在服務器端`Access-Control-Allow-Credentials`應該被設為`true`。
```
add_header 'Access-Control-Allow-Origin' 'http://localhost:3000';
add_header 'Access-Control-Allow-Credentials' 'true';
```
再重新發起新的域跨請求。

可見,請求是成功的。
但是,服務器能得到那些cookie信息的內容嗎?
#### 3. echo指令
在nginx中還是可以輕易獲取到cookie的內容的,那就是通過nginx的變量來獲得。
`$cookie_XXX`這樣的變量就是獲取cookie內容,比如`name=value`這樣的cookie信息可以通過`$cookie_name`變量獲得。
為了驗證要在nginx中把cookie的內容打印出來,我們在這里要利用一個模塊:[echo-nginx-module](https://github.com/openresty/echo-nginx-module)。
它提供了`echo`指令可以輸出變量的內容。
要編譯這個模塊,可以參照我之前的一篇文章:[nginx之編譯第三方模塊(六)](http://www.rails365.net/articles/nginx-zhi-bian-yi-di-san-fang-mo-kuai-liu)。
```
add_header 'Access-Control-Allow-Origin' 'http://localhost:3000';
add_header 'Access-Control-Allow-Credentials' 'true';
echo "name = $cookie_name";
```
現在重新發起跨域請求,來看下響應的信息。

果然,服務器上是能獲得cookie的信息的。
完結。
下一篇:[CORS進階之Expose-Headers(五)](http://www.rails365.net/articles/cors-jin-jie-expose-headers-wu)