WEB應用程式狀態管理

2021-07-25 12:45:47 字數 4114 閱讀 1241

作用:實現請求響應過程結束後,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可以區分多個表單提交。可以儲存當前使用者操作 的狀態。防止表單重複提交,儲存...