地址:https://blog.csdn.net/smq29661318/article/details/51025905
對於某些大型項目的開發,可能會將一個項目拆分成若干個子項目進行開發,但是項目之間的某些頁面之間通過某些入口是可以相互跳轉的,因此,對於有些會話的狀態也是需要共享的,例如國際化,子系統A在切換語言環境后跳轉到子系統B,用戶第一次進入B系統頁面時的語言環境應該是和跳轉前A系統是一致的,一般開發過程中,會將語言信息存儲到Cookie或者Session乃至可以是第三方緩存中,例如Redis,今天就先談一下,如何實現項目之間的Cookie共享。
例如有兩個項目,都會執行這一ajax,這一接口的作用是將數據傳到服務端,對傳入數據對應的JavaBean進行基於JSR303的注解校驗,並將結果返回給客戶端,返回的信息是何種語言是根據cookie中存儲的語言決定的。
$.ajax({ url: "http://localhost:8888/ssm/interfaces/test/m006", type: "POST", async: false, dataType: "json", contentType: "application/json", cache: false, data: JSON.stringify({ "id": "bgdsdgs", "name": "name", "email": "429661318@qq.com", "voModel2": [{ "id": "429661318@qq.com", "v3": {"id":"sdfghjkl"} }] }), success: function(data) { console.log(data.errorDetail); $("#aa").html(JSON.stringify(data)); }, error: function() { } })1234567891011121314151617181920212223給出一個設置cookie的js方法,為了說明原理,不用jquery-cookie等第三方庫
function setCookie(c_name, value, expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());}1234561、先在第一個工程下的頁面下的控制台執行setCookie(“lang”,”en_US”),添加名為lang,值為en_US的cookie
這時多出了一條cookie
此時刷新頁面,得到的信息就是英文信息
2、這時在第二個頁面直接訪問相同的接口,但是出現的依然是中文信息。
雖然訪問的是同一個接口,而且都是根據當前的cookie值來確定語言的,並且cookie的值是一樣的,為什么一邊是中文二另一邊卻是英文呢。 根據上面的圖可以看出,cookie除了name,value,expire等信息以外,還有domain和path屬性,domain就是當前域,默認為請求的地址,如網址為www.jb51.net/test/test.aspx,那么domain默認為www.jb51.net,path默認就是當前項目的根目錄,path和domain只要有一個不同,那就表示跨域,無法實現共享,而不同項目之間domain可能相同,而path一定是不同的。 因此在設定cookie的時候可以domain和path也一起設置,為了實現共享,兩個項目應該設置成一樣的。修改上面設置cookie的方法,具體設置什么要視情況而定
function setCookie(c_name, value, expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) +";path=/" +";domain=localhost";}12345678至此實現了cookie的共享,現在一個項目改變cookie中的語言環境信息,另一個項目也會跟着一起變了。 ps: 1、對於cookie,名稱一樣的情況下,如果path,domain不同,兩條cookie依然可以共存,而取的cookie默認是范圍最小的那個,即當前path和domain下的,所以無論如何也不會是其他domain和path下面的cookie。 2、java中設置cookie的方法
Cookie cookie = new Cookie("lang", "zh_CN"); // 設置domain cookie.setDomain("localhost"); // 設置path cookie.setPath("/"); // 設置以后無法再前端document中看到該cookie,提高了安全性 cookie.setHttpOnly(true); // 過期時間,秒為單位, // 小於0表示保存在內存中,關閉瀏覽器cookie就消失, // 等於0表示立即刪除該cookie // 大於0保存在硬盤上 cookie.setMaxAge(1); // 創建的 cookie 只能在 HTTPS 連接中被瀏覽器傳遞到服務器端進行會話驗證 cookie.setSecure(false);1234567891011121314
--------------------- 作者:貓了個咪呀 來源:CSDN 原文:https://blog.csdn.net/smq29661318/article/details/51025905 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!