作用:實現請求響應過程結束後,web伺服器記得使用者曾經做過的請求,和發出過的響應,甚至跨多個請求保留資訊;
解決辦法:如何儲存使用者的登入狀態資訊;cookies、session、url重寫、隱藏表單bidden;
一、表單的隱藏字段:
使用場景:
1.1對使用者在**上的訪問進行會話跟蹤;
1.2為伺服器端程式提供預定義的輸入
1.3儲存動態產生的頁面上下文資訊;
應用一:在多表單中的監控和跟蹤;在乙個頁面有多個表單的時候,可以監控使用者點選的那個表單;通過實現動態改變表達的value,以掌握表單是否已經登入過
應用二:對表單中點選進行增刪查改,通過hidden動態改變對選中框的value的值,當需要改變的時候就將這個提交給後台,進行增刪查改;
【實操案例:
對**操作實現購物車功能】:
第一步:設定**,在每個**的tr中設定,index = "1";index = "2";index = "3"
第二步:將選中的**的資訊儲存在hidden,然後將這些資訊提交給servlet,servlet將資料拿去操作持久層;
【總結:hidden】:
可以區分多個表單提交,可以儲存當前使用者操作**的狀態。
防止表單重複提交,儲存用於登入的狀態【如何做?】;
缺點:動態操作才能保留使用者的資訊,無法實現儲存使用者的資訊在固定的地方;
二、儲存使用者的會話狀態;cookie
會話含義:開啟瀏覽器,通過超連結或者按鈕訪問伺服器獲取到內容到關閉瀏覽器。稱為一次會話
會話解決問題:使用者訪問伺服器,想要儲存當前的資料,
主要作用:將訪問的次數,及時間進行記錄,以客戶自定義方式顯示web站點,客戶無需輸入使用者名稱和密碼訪問應用程式【這個方案安全性很差,勿用】;
2.1、cookies含義:1、是客戶端端的儲存技術,程式把每個使用者的資料都通過鍵值對的方式儲存到cookie;再把cookie傳送給伺服器端,伺服器端進行建立設定,再將伺服器建立的返回放在客戶端cookes裡面/2、下次請求的時候,將cookie放在
請求頭裡面,再次訪問伺服器,伺服器就可以根據cookie裡面的內容來判斷當前使用者的狀態;
【實操案例-cookie以鍵值對形式儲存指定的資訊,指定刪除行】:
post中,
response.setcontenttype("text/html;charset=utf-8");
printwrite out = respone.getwriter();
//獲取cookie 陣列的形式;
cookie cookie =
request.getcookies();
//獲取cookie的名字
cookie[i].getname()
//獲取cookie的值
cookie[i].getvalue()
//建立乙個cookie
cookie cook = new cookie("username","xiaowang");
//將cook新增到respone中去
respone.addcookid( cook );
//設定cookies儲存的有效期--以秒為單位 同時可以通過設定存續期為0銷毀他;
cook.setmaxage(24*3600);
實現在cookie儲存使用者的登入時間,提示使用者多久沒有登入;
cookie cookie =
request.getcookies();
if(cookie != null)
}}else
將每次訪問的時間資訊記錄下來,交給response傳回客戶端;
cookie內部資訊以鍵值對的形式儲存資訊;
cookie coo = new cookie("lasttime",system.currenttimemillis()+"");
coo.setmaxage(24*3600);
response.addcookie(coo);
實現日期時間中文格式化:da.toloocalestring();
【細節補充】:
1、一台電腦可以儲存200個cookie,在登入介面的時候,cookie會自動匹配會話的檔案路徑和查詢資源的是否一致,一致才能被呼叫;
2、設定過期時間cookie資訊被儲存在本地硬碟,
實現客戶的賬號,密碼儲存安全性不高;因此安全性更高的為session,將客戶資訊儲存在伺服器
三、session,
含 義:session 是伺服器端的技術,利用這個技術。我們可以為每乙個瀏覽器(使用者)建立乙個獨享的session物件;
實現過程:接收到訪問產生乙個session id,將session id 儲存在cookie裡面,再將cookie傳送回客戶端,客戶端下次訪問的時候將session id 從cookie裡面的相關資訊提取出來交給伺服器,伺服器取出sessionid去匹配session匹配上了就可以實現登入;
httpsession是session機制的實現規範,session僅僅是乙個介面,當伺服器被停止或者重啟的時候session也會被清空;
建立:session(session id)-- newcookie-- respone.addcookie(coo)---cookies
//建立物件:
getsession()方法封裝了實現過程:
實現第一步,int id = request.getsessionid();
第二步,獲取到cookie裡面的id和session進行匹配
第三步,匹配成功則
返回匹配的session物件,匹配失敗,則
建立乙個session
//不建立新的,只是匹配使用:
實現給某些使用者建立session,某些不建立,加false不建立,不加則建立; 在if(seesion!=null)中判斷給session建立】
//在session中儲存乙個鍵值對的使用者名稱和密碼;(string,object)乙個名字繫結乙個物件;
session.setattribute("username","xiaowang");
//判斷session是否是新建立的返回布林型別值,新建立返回true,否則返回false;
session.isnew()
"username");通過名字獲取session物件中儲存的物件
"username");刪除與指定名字對應的物件
//getcreationtime(): 返回第一次建立會話的時間;
//getlastaccessedtime();返回容器最後一次得到該會話id的請求時間;
//getid()返回每個session的唯一標識;
/ /會話超時管理:session的銷毀時間設定,cookie可以設定銷毀時間;
這是最長不活動時間
方式一:session.setmaxinactiveinterval(10); 以秒為單位,這裡是10秒;
方式二:立即銷毀:session.invalidate(); 立即銷毀,【用於登出功能到登入介面】
方式三:在xml中
以分鐘為單位,表示最長不活動時間- 1
【 補充】:編碼集三件套
request.setcharacterencoding("utf-8");
response.setcontenttype("text/html ;charset=utf-8");
response.setcharacterencoding("utf-8");
【小細節】:session,要滿足使用條件必須:sessionid存在(cookie存在-按照會話週期) session存在
【 解決方案】:設定cookie的最大儲存時間,會覆蓋getsession底層自己建立好的cookie
cookie c = new cookie("",);
【總結】:上下文物件是所有servlet和所有的使用者都共享的;session是所有servlet所共享的,但是每乙個使用者只有乙個session;
url重寫:
為了很好的維護和保留使用者狀態資訊,有的客戶會禁用cookie,這時用url重寫是很好的解決方案;
Web應用程式狀態管理
web應用程式狀態管理 一 web狀態管理概述 1 http協議使用的是無狀態的連線 2 對容器而言,每乙個請求都來自於乙個新的客戶 二 狀態管理解決方案 隱藏字段 2 為伺服器端程式提供預定義的輸入。3 儲存動態產生的頁面上下文資訊。三 cookie原理 1 伺服器在響應請求時將一些資料以 鍵 值...
web應用程式狀態管理
web應用程式狀態管理概述 http協議使用的是無狀態連線 1 客戶端和web伺服器建立連線 2 客戶端傳送http請求 3 伺服器端接收客戶端的http請求,生成http響應回發 4 伺服器端關閉連線,客戶端解析回發響應,恢復頁面 連線只針對乙個請求 響應,解決方案 1 表單隱藏字段 對伺服器端程...
WEB應用程式狀態管理
方案 cookie session url重寫 隱藏表單 會話 開啟瀏覽器,通過超連結或者按鈕返回伺服器,獲取到內容,關閉瀏覽器,稱為一次會話。會話解決的問題 使用者訪問伺服器,想要儲存當前的資料。表單隱藏字段 hidden可以區分多個表單提交。可以儲存當前使用者操作 的狀態。防止表單重複提交,儲存...