1. 程式人生 > >(關於Cookie共享的兩種解決方案Domain屬性和Nginx)

(關於Cookie共享的兩種解決方案Domain屬性和Nginx)

1.設定Cookie的Domain

首先要了解Cookie作用域,這裡就用到了cookie的兩個屬性 domain,path

  1. domain 這個屬性可以設定cookie的作用域,path可以設定cookie的作用路徑

  2. 當作用域相同和作用路徑相同的時候才可以事項cookie共享 那麼知道了domain和path的作用之後就開始解決問題把

  3. 現在有A,B兩個專案,我希望在a專案登入後在b也能保持登入狀態就需要把使用者資訊存入cookie,那這時候b就要獲取a的cookie,首先專案域分別是a.test.com和b.test.com沒有(域名是要給domain賦值用的)所以沒有域名的話去修改下host檔案把

    a.test.com [a專案ip],b.test.com [b專案ip]

//登入後把使用者資訊寫入cookie,我這裡是存進去一個token值這裡就當做token=user1
	Cookie user_cookie = new Cookie("token","user1");
	//設定cookie的domain這裡注意寫的是主域名
	//(a.test.com,b.test.com的主域名就是.test.com)
	//寫入這個引數之後所有主域名為.test.com的專案都可以呼叫這個cookie
	user_cookie.setDomain(".test.com");
	//設定cookie的path 
//path這裡直接寫 / 表示所有路徑都可以訪問 user_cookie.setPath("/"); //然後返回cookie response.addCookie(user_cookie);

這個時候去瀏覽器檢視你的cookie你會發現展示的domain和path都是你設定的了 就這樣就可以實現cookie共享了 這個方法簡單但是有一個弊端 就是你的專案必須是同一個主域名才可以,那麼當我們的域名不同的時候怎麼實現呢?就要看第二個解決方法Nginx反向代理(欺騙瀏覽器)

2. Nginx反向代理

	其實原理都是一樣的,讓cookie的作用域和作用路徑相同就可以實現cookie共享
	,Nginx則是用反向代理來代理兩個專案伺服器,這時候瀏覽器就認為兩個伺服器
	不說廢話直開始來源相同就可以實現cookie共享了,不說廢話開始

首先要去安裝一個Nginx安裝教程這裡就不發了網上一搜一大堆Windows,Linux應有盡有,另外我這裡部署專案用的是Tomcat8.5

下載後進入Nginx目錄如下 nginx-1.14.0 |— --conf |— --contrib |— --docs |— --html |— --temp |— --nginx.exe 進入conf目錄可以看到一個nginx.conf的檔案Nginx的配置就在這裡進行就好啦 nginx會預設給我們配置一些引數這裡不做詳細講解,只解決問題 開啟配置檔案 如果有興趣最好可以去好好看看 這裡只附上Http模組下內容

http {
    include       mime.types;
    default_type  application/octet-stream;
   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_body_buffer_size    8m;
    server_tokens off;
    ignore_invalid_headers   on;
    recursive_error_pages    on;
    server_name_in_redirect off;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65; 
#上面這些引數用Nginx預設的即可

#我們今天的重點配置在這裡
#upstream 這裡設定代理的物件 寫上我們的專案路徑域名,ip都可
# project1,project2是自己起的名字

upstream project1{
	server 192.168.1.41:8080; #記得改成自己的ip和埠
}
upstream project2{
	server 192.168.1.41:8081; #記得改成自己的ip和埠
}
#這裡配置我們的server
server {
    listen       888;#監聽埠 就是你訪問Nginx的埠號自己定
    #//給這個server起一個別名  http模組可有多個server 這個名字是唯一標識
    server_name  demo1; 
    #location /[這裡跟你的專案名] 就是你在Tomcat部署的專案路徑
     location /project1 {
        proxy_pass http://project1;#這裡對應上邊宣告的upstream 代表跳轉的目標專案
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header Cookie $http_cookie;
        log_subrequest on;
    }
	#同上配置第二專案
    location /project2 {
        proxy_pass http://project2;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header Cookie $http_cookie;
        log_subrequest on;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}   

}