1. 程式人生 > >java使用cookie和session

java使用cookie和session

當某個使用者發出頁面請求時,WEB伺服器只是簡單的進行響應,然後就關閉與該使用者的連線,請求的相關資料將不再存在,這樣明顯有不好的地方。cookie和session解決了這一問題,客戶端(一般是瀏覽器)與伺服器之間的互動,將操作所涉及的資料記錄下來,儲存在cookie(儲存在瀏覽器客戶端)或者session(儲存在伺服器)中。

一、cookie

1、什麼是cookie

瀏覽器在訪問伺服器時,伺服器將一些資料以 set-cookie 訊息頭的形式傳送給瀏覽器。瀏覽器會將這些資料儲存起來。當瀏覽器再次訪問伺服器時,會將這些資料以 cookie 訊息頭的形式傳送給伺服器。

2、建立 cookie

Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);12

cookie的name不可以重複,和Map集合類似,當有重複的name的時候,會替代。

3、查詢cookie

//如果沒有 cookie,則返回 null。
Cookie[] cookies = request.getCookies();
String name = cookie.getName();
String value = cookie.getValue();1234

4、cookie 儲存時的編碼問題

cookie 的值叧能是ascii 字元,如果是中文,需要將中文轉換成 ascii 字元形式。可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法來進行這種轉換。

5、cookie 的儲存時間

cookie.setMaxAge(int seconds);//單位為秒 
  seconds > 0 
瀏覽器會將 cookie 以檔案的方式儲存在硬碟上。在超過指定的時間以後,會刪除該檔案。 
  seconds < 0 
預設值,瀏覽器會將 cookie 儲存在記憶體裡面。叧有當瀏覽器關閉以後,才會刪除。 
  seconds = 0 
立即刪除該 Cookie

6、刪除 cookie

比如要刪除一個 name 為”username”的 cookie。 
Cookie c = new Cookie(“username”,”“); 
c.setMaxAge(0); 
cookie.setPath(request.getContextPath());//路徑 
response.addCookie(c);

7、cookie 的限制

  cookie 可以禁止 
  cookie 的大小有限制(4k 左右) 
  cookie 的數量也有限制(瀏覽器大約能儲存 300 個) 
  cookie 的值叧能是字串,要考慮編碼問題。 
  cookie 不安全

8、cookie 的路徑問題 

瀏覽器在向伺服器上的某個地址傳送請求時,會先比較 cookie 的路徑不向訪問的路徑(地址)是否匹配, 叧有匹配的 cookie, 才會傳送。 
cookie 的路徑可以通過 cookie.setPath(String path)方法來設定。如果沒有設定, 則有一個預設的路徑,預設的路徑是生成該 cookie 的元件的路徑。 
比如: /appname/addCookie 儲存了一個 cookie,則該 cookie 的路徑就是/appname/addCookie。  
規則: 
cookie 的路徑必須是要訪問的路徑的上層目錄戒者是不要訪問的路徑相等, 瀏覽器才會將 cookie 傳送給伺服器。一般可以設定 setPath(“/appname”),表示訪問該應用下的所有地址,均會發送

二、session

1、什麼是session

瀏覽器訪問伺服器時,伺服器會建立一個 session 物件(該物件有一個唯一的 id, 一般稱為 sessionId)。伺服器在預設情況下,會將 sessionId 以 cookie 機制傳送給瀏覽器。當瀏覽器再次訪問伺服器時, 會將sessionId 傳送給伺服器。 伺服器依據 sessionId 就可以找到對應的 session 物件。

2、如何獲得 session 物件

HttpSession session = request.getSession();

3、HttpSession 介面提供的一些方法

//獲得 sessionId。
String session.getId();
//綁訂資料
session.setAttribute(String name,Object obj);
//獲取資料
Object session.getAttribute(String name);
//刪除繫結
session.removeAttribute(String name);12345678

4、session儲存時間設定

伺服器會將超過指定時間的 session 物件刪除(在指定的時間內,該 session 物件沒有 
使用)。 
兩種設定方式: 
方式一: 
session.setMaxInactiveInterval(int seconds); 
方式二: 
伺服器有一個預設的超時限制,可以通過相應的配置檔案來重新設定。比如可以修改 tomcat 的 web.xml(tomcat_home/conf 下面)。

<session-config>
    <session-timeout>30</session-timeout>
</session-config>123

另外,也可以叧修改某個應用的 web.xml。

5、session刪除

session.invalidate();

三、用cookie記錄最近10條記錄

用cookie查詢最近一個月請求的前10條歷史記錄。cookie的中文要求轉碼和解碼。如下圖 


1、加入cookie到客戶端

        Cookie[] cookies = request.getCookies();//瀏覽器在第一請求時呼叫該方法會返回null
        //瀏覽器第一次請求返回到瀏覽器之前會建立一個名為JSESSIONID 的cookie
        //param(請求引數)中文轉碼
        String paramEnd = URLEncoder.encode(param);
        Cookie cookie = new Cookie("param"+cookies.length,paramEnd);//name不可以重複
        cookie.setMaxAge(60*60*24*30);//保留一個月的時間
        response.addCookie(cookie);//cookie在第一次加入時會建立一個JSESSIONID cookie1234567

2、獲取所有滿足條件的cookie

        Cookie[] cookies = request.getCookies();
        if(cookies!=null && cookies.length>0){
            Map<String,Object> historyPar =  (Map<String, Object>)new ListOrderedMap();//按存入順序取出,HashMap並不是按存入順序取出
            for(int i=cookies.length-1;i>=0;i--){
                Cookie cookie = cookies[i];
                String cookVal = URLDecoder.decode(cookie.getValue());
                if(cookie.getName().startsWith("param")){
                    if(historyPar.size()==10) break;//查詢最近10條記錄
                    historyPar.put(cookVal, cookVal);//map的key值用cookie的value,以免歷史記錄重複
                }
            }
            model.addAttribute("historyPar",historyPar);
        }12345678910111213

3、js實現歷史清除

//刪除該路徑下所有cookie
    function cleanCookie(){
         var keys=document.cookie.match(/[^ =;]+(?=\=)/g);
         if (keys) {
            for (var i =  keys.length; i--;){
               document.cookie=keys[i]+'=0;expires=' + new Date( 0).toUTCString()
            }
         }  
         window.location.href="${ctx}/searchController/globalSearch";
    }12345678910

至此即可查詢出最近一個月的前10條歷史記錄。
--------------------- 
作者:俺就不起網名 
來源:CSDN 
原文:https://blog.csdn.net/u012385190/article/details/51957749 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關推薦

cookie session 的區別詳解

重復 處理方式 一行 所有 有效 依據 是把 存儲 一個 二者的定義: 當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇, 都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的

客戶端服務端如何使用TokenSession

cnblogs blank style ssi exception font 統一 判斷 用戶 一、我們先解釋一下他的含義: 1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作

Python之路66-Django中的CookieSession

python目錄一、Cookie二、Session一、Cookie1.獲取Cookie request.COOKIES["key"] request.get_signed_cookie(key, default=RAISE_ERROR, s, max_age=None) # 參數 # default:默認

setMaxInactiveIntervalsession-config的比較

ive 當前 添加 XML 設置 active max 服務 cti setMaxInactiveInterval和session-config的比較: 1、setMaxInactiveInterval的優先級高,如果setMaxInactiveInterva

Cookiesession

存在 購物車 自動 名稱 () 內存 request 標識 基於 1.會話定義:打開瀏覽器瀏覽某一個網站--多次請求--瀏覽器關閉這個過程稱之為會話。2.B 瀏覽器 /S 服務器 2.1.瀏覽器端的會話技術:cookie JAVA(Cookie)   

cookiesession的區別

開發人員 一個 客戶端 匹配 也會 自己 ssi 成了 本地 幾乎每個web開發人員都會問Cookie和Session有什麽聯系和區別 拋出問題: 1.首先服務器是無記性的,不知道那個客戶端上過自己的網站; 2.如果不手動添加記憶功能,那麽每次訪問都需要登錄,豈不是很麻煩?

Django之cookiesession

name resp wrap sign ide 服務端 rgs err response 一、cookie 保存在客戶端瀏覽器上的鍵值對 1.獲取cookie 1 request.COOKIES[‘key‘] 2 request.get_signed_cookie(key

淺談hibernate的sessionFactorysession

ber 讀取配置 簡單 開啟 mil fig 理解 name () 首先,講一個悲傷的故事。。。 有一天,一個以為自己javaEE很叼的程序員,在經歷了好久不寫Java代碼的情況下,去參加阿裏巴巴的java面試,然後,在被問到一個很簡單的問題的時候,結果沒有回答好。那麽接下

Cookie Session

詳解 存儲 意見 語言 ron http font 郵箱 通過         PHP高級工程師之網站安全     在這裏和大家分享一下多數網絡黑客常用的攻擊方式及預防措施。     如有不善,多提意見(QQ:1595068971-郵箱:[email protec

HttpContext.Current.Session Session 的區別

使用 pro 啟動 protect and con 動作 system ont Session(會話)通常指一個動作從開始到結束不間斷的一個動作。 例如“打電話”,通常是“1.拿起電話--2.撥對方號碼--3.對方截圖--4.掛機&rd

[Java][web]利用Spring隨時隨地獲得RequestSession

login html article -a private 綁定 ren alt 結束 利用Spring隨時隨地獲得Request和Session 一、準備工作: 在web.xml中加入 <listener> <

關於django用戶登錄認證中的cookiesession

技術 ima username 就會 關於 logs 之前 cookie req 最近弄django的時候在用戶登錄這一塊遇到了困難,網上的資料也都不完整或者存在缺陷。 寫這篇文章的主要目的是對一些剛學django的新手朋友提供一些幫助。前提是你對django中的sessi

cookiesession的優缺點

cookie sessioncookie是web服務器保存在用戶硬盤上的一段文本,cookie允許在用戶電腦上保存信息並隨後再取它。當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此

day18-2-django之分頁session

特征 request 客戶 .site none func pytho 控制 render Django-4 知識預覽 分頁器(paginator) COOKIE 與 SESSION 回到頂部 分頁器(paginator) 分頁器的使用 >>

Cookie Session 的區別

cto 字符串 follow jsp技術 基礎 出現 有著 腳本 erb 作者:郭無心鏈接:https://www.zhihu.com/question/19786827/answer/66706108來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明

mysql基礎--global參數session參數的設置

入參 方式 重啟 mit .cn mysq img png 直接 1.修改my.ini配置文件,如果要設置全局參數最簡單的方式是在my.ini文件中直接寫入參數配置,如下圖所示。重啟數據庫服務就可以使全局參數生效。 如下圖所示,所有新開的session中的參數都生效了

restful架構風格設計準則(五)用戶認證session管理

好的 困難 是否 ica 過程 集成 設計 管理服務器 系統 讀書筆記,原文鏈接:http://www.cnblogs.com/loveis715/p/4669091.html,感謝作者! Authentication   其實在上一節中,我們已經提出了無狀態約束給REST

CookieSession,訪問Web項目上的資源文件

容量 bmi red 顯示 ssi 物理 spa 管理 正整數 WEB項目總路徑問題總結: 背景:項目中的資源文件我們如何訪問:(路徑怎麽寫) 例子:webRoot目錄下有一個目標資源: target.html,如何訪問 思考: 目標

Struts的學習-通配符session對象

tro gif 通過 action 方法 war aware bsp tex 一、 取得session 3種方法1、context.getSession() -->>Map對象2、HttpServletRequest request =(HttpServletR

基礎知識《十二》一篇文章理解CookieSession

alt str web應用 rfi 密鑰 hide 開始 單位 ews 理解Cookie和Session機制 會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。Co