宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動態(tài)
精選推薦

Cookie用法詳細(xì)介紹

管理 管理 編輯 刪除

cookie簡介

1. 定義
cookie是由服務(wù)器發(fā)送給客戶端(瀏覽器)的小量信息。

2. 作用
cookie是鍵值對形式存儲的少量信息,那它有什么作用呢?

我們知道,平時上網(wǎng)時都是使用無狀態(tài)的HTTP協(xié)議傳輸出數(shù)據(jù),這意味著客戶端與服務(wù)端在數(shù)據(jù)傳送完成后就會中斷連接。這時我們就需要一個一直保持會話連接的機(jī)制。在session出現(xiàn)前,cookie就完全充當(dāng)了這種角色。也就是,cookie的小量信息能幫助我們跟蹤會話。一般該信息記錄用戶身份。

當(dāng)然cookie也常記錄跟蹤購物車的商品信息(如數(shù)量)、記錄用戶訪問次數(shù)等。

3. 原理
客戶端請求服務(wù)器時,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie。而客戶端瀏覽器會把Cookie保存起來。當(dāng)瀏覽器再請求服務(wù)器時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器通過檢查該Cookie來獲取用戶狀態(tài)。

4.添加cookie示例
獲取客戶端的Cookie時,只能獲取name與value屬性,其它屬性都不會被提交。

    Cookie c = new Cookie("username","peter");// 新建一個Cookie對象
    c.setMaxAge(24*60*60);                    // 設(shè)置過期時間1天,以秒為單位
    response.addCookie(c);                    // 保存cookie到客戶端

5.刪除cookie示例
刪除某個Cookie時,只需要新建一個只有maxAge和value不一樣的同名Cookie,然后添加到response中覆蓋原來的Cookie

    Cookie cookie = new Cookie("username","peter");// 新建Cookie
    cookie.setMaxAge(0);                           // 設(shè)置生命周期為0,表示將要刪除
    response.addCookie(cookie);                    // 執(zhí)行添加后就從response里刪除了

6.修改cookie示例

修改某個Cookie時,只需要新建一個只有value屬性不一樣的同名Cookie,然后添加到response中覆蓋原來的Cookie

    Cookie cookie = new Cookie("username","joker");// 新建Cookie
    cookie.setMaxAge(24*60*60);                    // 設(shè)置生命周期
    response.addCookie(cookie);                    // 執(zhí)行添加后就從response里覆蓋修改了

注意:修改、刪除Cookie時,新建的Cookie除value、maxAge之外的所有屬性,例如name、path、domain等,都要與原Cookie完全一樣。否則,瀏覽器將視為兩個不同的Cookie而不會覆蓋之前的Cookie,從而導(dǎo)致修改、刪除失敗。

Cookie類的各方法詳解

Cookie類在javax.servlet.http.Cookie包中

f066e20230313171248675.png

對應(yīng)的getter方法我就不講了。
如果cookie值為Unicode字符,需要為字符編碼。如果cookie值為二進(jìn)制數(shù)據(jù),則需要使用BASE64編碼

cookie的setPath()和setDomain()方法
默認(rèn)情況下cookie只能在一個應(yīng)用中共享,即一個cookie只能由創(chuàng)建它的應(yīng)用獲得。

設(shè)置同一服務(wù)器內(nèi)的cookie使用范圍用setPath
c.setPath(“/”),使同一服務(wù)器內(nèi)所有應(yīng)用都可訪問到該Cookie:

    Cookie c = new Cookie("name","peter");
    c.setMaxAge(24*60*60);  
    c.setPath("/");//同一服務(wù)器內(nèi)所有應(yīng)用都可訪問到該Cookie
    response.addCookie(c); //保存cookie到客戶端

1.如果同一服務(wù)器內(nèi)有兩個應(yīng)用agx1.0和agx2.0
當(dāng)我們在agx1.0里有c.setPath(“/agx2.0/”);時,該cookie就只能在agx2.0下面能獲取到,就連創(chuàng)建該cookie的agx1.0也獲取不到。

2.如果在agx1.0里有c.setPath(“/agx2.0/abc/”);時,則只能在agx2.0/abc下面才能獲得該cookie,即使在agx2.0下面也不能獲取到。

cookie的跨域
1.正常情況下Cookie不可跨域名,如域名www.google.com頒發(fā)的Cookie不會被提交到域名www.baidu.com去。這是由Cookie的隱私安全機(jī)制決定的。即使在同一個一級域名下的兩個二級域名如www.agx.com和images.agx.com也不能交互使用Cookie,因為二者的域名并不嚴(yán)格相同。如果想所有agx.com名下的二級域名都可以使用該Cookie,則需要設(shè)置Cookie的domain參數(shù)為”.agx.com”,例如:

    Cookie cookie = new Cookie("name","peter"); // 新建Cookie
    cookie.setDomain(".agx.com");               // 設(shè)置域名
    cookie.setPath("/");                        // 設(shè)置路徑
    cookie.setMaxAge(Integer.MAX_VALUE);        // 設(shè)置有效期為永久
    response.addCookie(cookie);                 // 輸出到客戶端

讀者可以修改本機(jī)C:\WINDOWS\system32\drivers\etc下的hosts文件來配置多個臨時域名,然后使用setCookie.jsp程序來設(shè)置跨域名Cookie驗證domain屬性。
注意:domain參數(shù)必須以點(“.”)開始。另外,name相同但domain不同的兩個Cookie是兩個不同的Cookie。如果想要兩個域名完全不同的網(wǎng)站共有Cookie,可以生成兩個name相同的Cookie,domain屬性分別為兩個域名。

2.若A服務(wù)器的域名為:adv.audiogroup.com,有應(yīng)用名為:agx1.0; B服務(wù)器的域名為:agx.com,有應(yīng)用名為:agx2.0。
在A服務(wù)器的agx1.0應(yīng)用下設(shè)置cookie如下:

    Cookie cookie = new Cookie("name","peter"); // 新建Cookie
    cookie.setDomain(".agx.com");               // 設(shè)置域名
    cookie.setPath("/");                        // 設(shè)置路徑
    cookie.setMaxAge(Integer.MAX_VALUE);        // 設(shè)置有效期為永久
    response.addCookie(cookie);                 // 輸出到客戶端

這時,在B服務(wù)器下的agx2.0應(yīng)用和agx1.0里都能取到上面的Cookie。
注:輸入URL訪問agx2.0時,必須輸入域名才能獲取其它服務(wù)器共享給它的cookie,如:
輸入http://images.agx.com:8080/agx2.0,可以獲取agx1.0在客戶端設(shè)置的cookie
輸入:http://localhost:8080/agx2.0則不可以獲得cookie。

setPath()與setDomain()的區(qū)別?
setDomain()主要用來確定兩個不同名稱但后綴相同的網(wǎng)站地址是否能使用同一個Cookie。
例: www.agx.com和 bbs.agx.com只要有cookie.setDomain(“.zjut.edu.cn”);就都能使用該cookie

setPath()主要用來確定地址里什么后綴下能夠使用這個Cookie

歸結(jié)起來就是:setDomain決定允許訪問Cookie的域名,而setPath決定允許訪問Cookie的路徑(ContextPath)

獲取用戶請求里的cookie

    Cookie[] cookie = request.getCookies();//獲取的是請求里的所有cookie組成的數(shù)組
    for(int i=0;i<cookie.length;i++){
        if("name".equals(cookie[i].getName())){
            System.out.println(cookie[i].getValue());//得到peter
            break;
        }
    }

解決cookie里中文亂碼問題
Cookie中要保存中文只能編碼。一般使用UTF-8編碼即可。不推薦使用GBK等中文編碼,因為瀏覽器不一定支持,而且JavaScript也不支持GBK編碼。

Cookie不僅可以使用ASCII字符與Unicode字符,還可以使用二進(jìn)制數(shù)據(jù)。例如在Cookie中使用數(shù)字證書,提供安全度。使用二進(jìn)制數(shù)據(jù)時也需要進(jìn)行編碼(如用BASE64編碼保存二進(jìn)制圖片)。由于瀏覽器每次請求都會帶著Cookie,因此Cookie內(nèi)容不宜過多,所以一般不會在Cookie中存儲二進(jìn)制的內(nèi)容

JS操作Cookie
Cookie是保存在客戶端的,所以瀏覽器可以使用腳本(JS)等操作Cookie。

<script language=javascript> 
    //添加cookie
    function setCookie(name,value,time){ 
        var date= new Date(); 
        date.setDate(date.getDate()+time); 
        document.cookie = name+"="+value+";expires="+date; 
    } 
 
    //獲得cookie
    function getCookie(name){ 
        var arr = document.cookie.split(";"); 
        for(var i=0; i<arr.length; i++){ 
        var arr2 = arr[i].split("="); 
            if(arr2[0] == name){ 
                return arr2[1]; 
            } 
        } 
        return null; 
    } 
 
    //刪除cookie
    function removeCookie(name){ 
        setCookie(name,"",0) 
    } 
</script>

W3C標(biāo)準(zhǔn)的瀏覽器會阻止JavaScript讀寫任何不屬于自己網(wǎng)站的Cookie。即A網(wǎng)站的JavaScript代碼里獲取不到B網(wǎng)站的Cookie。

使用cookie記住密碼
方案1:
直接把用戶名與密碼都保持到Cookie中,下次訪問時檢查Cookie中的用戶名與密碼,與數(shù)據(jù)庫比較。這是一種比較危險的選擇,一般不把密碼等重要信息保存到Cookie中。
方案2:
把密碼加密后保存到Cookie中,下次訪問時解密并與數(shù)據(jù)庫比較。這種方案略微安全一些。如果不希望保存密碼,還可以把登錄的時間戳保存到Cookie與數(shù)據(jù)庫中,到時只驗證用戶名與登錄時間戳就可以了。
方案3:
實現(xiàn)方式是把賬號按照一定的規(guī)則(密鑰)加密后,連同賬號一塊保存到Cookie中。下次訪問時只需要判斷賬號的加密規(guī)則是否相同即可。
加 密:

    String userName = request.getParameter("userName");//獲取用戶名
    Md5Hash psw = new Md5Hash(userName, "peter.com", 2);//以peter.com為密鑰加密
 
    //將用戶名添加進(jìn)cookie并發(fā)送給客戶端
    Cookie userCookie = new Cookie("userName",userName);
    userCookie.setMaxAge(7*24*60*60);
    response.addCookie(userCookie);
    
    //將密鑰生成的密文加進(jìn)cookie并發(fā)送給客戶端
    Cookie c = new Cookie("key",psw.toString());
    c.setMaxAge(7*24*60*60);
    response.addCookie(c);

解密:

    String usreName = null;
    String key = null;
    Cookie[] cookie = request.getCookies();
    if(cookie !=null){              
        for(Cookie c:cookie){  // 遍歷Cookie
           if("userName".equals(c.getName()) 
               userName = c.getValue();      
           if("key".equals(c.getName()) 
               key= cookie.getValue();       
        }
    }
    if(userName != null && key != null){   
        String secrect = new Md5Hash(userName, "peter.com", 2);
        if(key.equals(secrect )){//加密規(guī)則正確,說明已經(jīng)登錄
            //...
            //....省略后續(xù)處理
        }
    }

由上面可知,如果將密碼加密后存進(jìn)cookie后,當(dāng)我們下次訪問登錄頁時,密碼框里的密碼將不是用戶真正的密碼。

原文鏈接:https://blog.csdn.net/qq_29132907/article/details/80390792

請登錄后查看

CRMEB-慕白寒窗雪 最后編輯于2023-03-13 17:15:37

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
1524
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動態(tài) 精選推薦 首頁頭條 首頁動態(tài) 首頁推薦
取 消 確 定
回復(fù)
回復(fù)
問題:
問題自動獲取的帖子內(nèi)容,不準(zhǔn)確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊

切換手機(jī)號登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服