1. 程式人生 > >Cookie的Secure屬性

Cookie的Secure屬性

基於安全的考慮,需要給cookie加上Secure和HttpOnly屬性,HttpOnly比較好理解,設定HttpOnly=true的cookie不能被js獲取到,無法用document.cookie打出cookie的內容。

Secure屬性是說如果一個cookie被設定了Secure=true,那麼這個cookie只能用https協議傳送給伺服器,用http協議是不傳送的。換句話說,cookie是在https的情況下建立的,而且他的Secure=true,那麼之後你一直用https訪問其他的頁面(比如登入之後點選其他子頁面),cookie會被髮送到伺服器,你無需重新登入就可以跳轉到其他頁面。但是如果這是你把url改成http協議訪問其他頁面,你就需要重新登入了,因為這個cookie不能在http協議中傳送。

例子是:

前提條件:https://localhost:9102應用對cookie設定了Secure=true

1. 訪問 https://localhost:9102/manager

2. 輸入使用者名稱、密碼,用IE或者Chrome的developer tool會看到response的header裡,set-cookie的值裡有Secure屬性

3. 登入後,繼續訪問https://localhost:9102/manager#user,可以正常看到內容

4. 修改url,訪問http://localhost:9100/manager#domain,會跳轉到登入頁面,因為cookie在http協議下不傳送給伺服器,伺服器要求使用者重新登入

 

原因分析:

伺服器開啟了Https時,cookie的Secure屬性應設為true;

 

解決辦法:

1.伺服器配置Https SSL方式,參考:https://support.microsoft.com/kb/324069/zh-cn

2.修改web.config,新增: 

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" />
<system.web> 

See:  

http://msdn.microsoft.com/en-us/library/ms228262(v=vs.100).aspx