cookie的作用域


前陣子,接一個用戶授權服務時,遇到一個關於cookie的詭異問題,折騰了一天才知道問題出在哪兒,雖然時候才知道這是個小白問題。

遇到問題是這樣子:

     比如訪問A地址(比如http://localhost/index,http://localhost/test/index)時需要登陸時會跳轉到一個登陸頁面,登陸成功后,跳轉回原頁面,這時將用戶信息存入到session中,並通過response的Set-Cookie頭信息,設置向對應的cookie值。具體如下:

Set-Cookie:sid=Wnse42HlgkYBbLtAEOMRkXcWHSwkr9nRUS0WBFFHA4TCZUga; Max-Age=28800; Expires=Mon, 18 Mar 2013 12:07:32 GMT; 

     乍一看沒有問題吧?

     當A地址是在一級目錄,比如http://localhost/index,這樣是沒有任何問題的。

     但A地址是在二級目錄,比如http://localhost/test/index,問題就來了。訪問過A后再去訪問其他層級的目錄,比如http://localhost/test2/index,這時是得不到用戶的cookie信息,就好像之前的登陸無效一樣。

現在大家應該清楚問題處在哪了?cookie的作用域問題

解決方法也很簡單,指定全局的作用域

Set-Cookie:sid=Wnse42HlgkYBbLtAEOMRkXcWHSwkr9nRUS0WBFFHA4TCZUga; Max-Age=28800; Expires=Mon, 18 Mar 2013 12:07:32 GMT; Path=/;

 這里很重要的一點是:正常的cookie只能在一個應用中(簡單理解,就是一個目錄)共享,即一個cookie只能由創建它的應用獲得,比如在/test1/*創建自己應用的cookie,/test2/*下是拿不到。而且很容易被忽視的一點:path默認是產生cookie的應用的路徑

如果兩者需要共享的話,指定Path為"/"即可

所以以前千萬不要為了省事,而不設置一些重要的參數,不然......

具體的測試代碼可見:https://github.com/jifeng/toycode/blob/master/cookie/path.js

     

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM