關於前后端寫入Cookie時domain的一個問題


1.1. 前端

先假設有如下setCookie方法:

function setCookie(name, value, day, path, domain)
{
	day = day || 30;
	path = path || '/';
	var str = name + '=' + value + '; ';
	if(day) str += 'expires=' + new Date(Date.now() + day * 24 * 3600 * 1000).toGMTString() + '; ';
	if(path) str += 'path=' + path + '; ';
	if(domain) str += 'domain=' + domain;
	document.cookie = str;
},

假設當前域名為blog.xiaoming.com,經測試發現,JS在寫入cookie時:

xei.setCookie('test1', 'abcd', 30, '/'); // 成功,默認寫入當前域名
xei.setCookie('test2', 'abcd', 30, '/', 'blog.xiaoming.com'); // 成功,前面追加一個“.”
xei.setCookie('test3', 'abcd', 30, '/', 'abcd.xiaoming.com'); // 寫入不成功
xei.setCookie('test4', 'abcd', 30, '/', '.xiaoming.com'); // 成功
xei.setCookie('test5', 'abcd', 30, '/', 'xiaoming.com'); // 成功,前面追加一個“.”
xei.setCookie('test6', 'abcd', 30, '/', 'www.qq.com'); // 寫入不成功

結果:
在這里插入圖片描述
說明:

  • 不傳domain,默認當前域名;
  • 只要傳了domain,則會強制在前面加上一個.,不管是一級還是二級域名;
  • domain只能“小於等於”當前域名,否則寫入不成功;

1.2. 特別注意

另外發現,.xiaoming.com下的cookie會出現在blog.xiaoming.com頁面(也就是說可以被下級域名正確獲取到),但是,xiaoming.com下的cookie不會出現在它的子域名頁面!這個是以前沒有注意的!

所以特別注意:

要想寫入的cookie被其子域名共享,域名前面必須加一個英文的.!

1.3. 后台

以Java為例:

private void setCookie(HttpServletResponse response, String name, String value, String domain, String path, Integer days)
{
	Cookie cookie = new Cookie(name, URLUtil.encode(value));// 防止中文亂碼問題
	cookie.setDomain(domain);
	cookie.setPath(path);
	cookie.setMaxAge(60 * 60 * 24 * days);
	response.addCookie(cookie);
}

經測試同樣存在和前端一樣的問題:不傳domain則默認當前域名,傳了則強制在前面加一個.。


免責聲明!

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



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