999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Web應用的會話跟蹤技術的分析與應用

2020-03-20 21:22:22徐岸蘭全祥
赤峰學院學報·自然科學版 2020年2期

徐岸 蘭全祥

摘要:在Web應用中會話跟蹤技術被用于保持客戶端訪問服務器時連續的狀態的常用技術.正是由于會話跟蹤技術的出現使得Web應用開發變得更加便利,并且提高了網站性能.本文將圍繞JavaWeb中的會話跟蹤技術展開及其域對象分析與討論,探討了會話跟蹤技術的背景、工作機制、相關應用以及對它們的比較.

關鍵詞:會話跟蹤技術;Cookie Session Web應用

中圖分類號:TP393.09 ? 文獻標識碼:A? 文章編號:1673-260X(2020)02-0057-03

1 引言

傳統的HTTP(HyperText Transfer Protocol)協議本身是無狀態[1],即在Web應用中多個客戶端訪問服務器端時,服務器端并不能區分各個客服端狀態信息.這種無狀態的缺陷阻礙了Web應用的發展.

為了解決HTTP無狀態的缺陷,Netscape公司推出了一項HTTP的狀態管理機制:Cookie[1].服務器使用Cookie就能跟蹤每個客戶端的訪問.但每次客戶端訪問都會傳回這些Cookie,當Cookie數量很多時,這樣無疑地增加了服務器的壓力.Session的出現就解決了這個問題.Session技術是基于Cookie技術的服務器端數據存儲技術.JSP(Java Server Pages)為了存儲客戶端信息,也提出了Request Scope和Context Scope等技術.正是利用它們不同的特性,簡化了服務器端的程序設計、增加了Web應用開發的便利性,并且提高了網站性能.

在一個客戶端中打開瀏覽器訪問某個網站開始,直到關閉這個瀏覽器的整個過程,稱為一次會話.會話技術就是記錄一次會話中客戶端的狀態與數據的技術.在Web應用開發中通常使用Cookie、Session、Request Scope、Context Scope等會話技術來存儲客戶端信息.

2 技術分析

2.1 Cookie-

當客戶端第一次訪問服務器時,服務器將用戶相關信息以Cookie的形式傳輸給客戶端[2].客戶端瀏覽器一旦接收了服務器發出的Cookie信息,就會將它存儲在瀏覽器緩沖區,即將數據存儲在客戶端中,當瀏覽器后續訪問該服務器時,都會在請求消息中將用戶相關信息以Cookie的形式發送給服務器,從而使得服務器可以分辨是哪個客戶端發送的請求(如圖1所示).

在Tomcat服務器中真正意義上創建Cookie是在org.apache.catalina.connector.Response類,通過調用generateCookieString方法將Cookie對象構造成一個遵循Cookie語法規則的字符串,并將這個字符串添加到MimeHears中,從而構建HTTP響應頭返回至客戶端.在Servlet中提供了setPath(String path)、setMaxAge(int expiry)等方法來設置HTTP響應頭Set-Cookie字段的屬性項.其中setPath(String path)是設置Cookie被允許訪問的路徑,如果不設置攜帶路徑,那么該Cookie信息會在訪問產生該Cookie的Web資源所在的路徑都攜帶cookie信息.在Servlet中使用javax.servlet.http.HttpServletRequest類中的getCookies()方法獲得一個Cookie的對象數組;使用javax.servlet.http.HttpServletResponse類中的addCookie(Cookie cookie)方法向客戶端發送Cookie

2.2 Session

Session技術是基于Cookie技術的服務器端數據存儲技術,即Session需要借助于Cookie所存儲的客戶唯一性標識JSESSIONID,即從客戶端傳輸一個NAME為JSESSIONID的Cookie給服務器,而這個JSESSIONID是客戶端第一次訪問服務器時所生成.在一次會話中客戶端只要傳回JSESSIONID給服務器,Tomact服務器就會選擇與之對應的Session對象為其服務[5].(如圖2所示)

當JSESSIONID傳入Tomact服務器中時,Tomact服務器中會將傳入的JSESSIONID解析為Session ID.當使用request.getSession()獲得HttpSession對象時,服務器就是利用Session ID判斷在Session容器中是否存在與之對應的HttpSession對象.如果有就返回該HttpSession對象;如果沒有,服務器就會創建一個新的HttpSession對象,并將這個對象添加到org.apache.catalina.Manager類的Session容器中.其中Manager類的功能是負責管理所有Session的生命周期、服務器關閉時Session將被序列化到磁盤、Session過期回收等.

2.2 Request Scope

Request是在Servlet方法調用前由Tomact服務器創建,Tomact服務器接到請求后,首先會創建org.apache.coyote.Request對象,Tomact服務器經過對此對象解析后會交給用戶線程去處理這個請求,同時會創建org.apache.connector.Request對象,這個對象將貫穿Servlet容器直至傳給Servlet.正是由于這樣的特性,Requese中存儲的數據可以在一次請求鏈中多次獲取,直至請求結束.

2.4 Context Scope

Context Scope的數據在Tomact服務器中是存放在ServletContext中,而在Servlet中獲得的ServletContext對象實際是ApplicationContextFacade對象,ApplicationContextFacade和ServletContext使用的是門面設計模式,它們可以在Context容器中獲取屬于他們的數據,并且對數據起到封裝作用.在服務器中ServletContext是在Tomact服務器啟動時就會被服務器創建,直至服務器關閉或該Web應用被移除.ServletContext中的數據被所有客戶端共享.

3 應用

3.1 通過Cookie保存用戶信息

當用戶在其所信任的客戶端登錄Web應用時,在服務器端對該用戶的登錄信息進行處理.那么該用戶在后續訪問該網站可直接以登錄狀態直接訪問.實現的方法是將用戶登錄信息保存在Cookie中,并控制Cookie的有效期,下次訪問網站時服務器驗證Cookie中的用戶信息即可.

但是Cookie是可以在瀏覽器明文查看的,Web應用中通常情況下,不會把密碼等重要的用戶信息保存到Cookie中.在上述條件下的實現方式:在服務器中將用戶的賬號通過MD5算法進行加密,將加密后的賬號和用戶賬號一起保存到Cookie中(Java實現代碼如下).用戶在后續登錄時驗證賬號的加密規則是否正確即可.

String autoLogin = request.getParameter("autoLogin");

if ("true".equals(autoLogin)) {

String account = request.getParameter("account");

String ssid = MD5Utils.MD5(account);

Cookie accountCookie = new Cookie("userID", account);

accountCookie.setMaxAge(30*60);

Cookie ssidCookie = new Cookie("ssid", ssid);

ssidCookie.setMaxAge(30*60);

response.addCookie(accountCookie);

response.addCookie(ssidCookie);

response.sendRedirect(request.getRequestURI() + "?" +System.currentTimeMillis());

}

3.2 利用Session防止表單重復提交

在Web應用中很多時候存在用戶重復提交表單的情況,如由于用戶操作不當多次提交表單;用戶網速過慢,不斷重復刷新提交表單;惡意用戶通過相關程序惡意重復提交表單等.上述非常規操作都會導致表單的重復提交.表單的重復提交可能會造成服務器端的數據重復,增加服務器的壓力,影響服務器的性能,甚至嚴重的話,可能會對服務器造成宕機的情況,因此Web應用中防止表單重復提交的技術顯得尤為重要.

利用Session防止表單重復提交,需要在該表單中增加一個隱藏表單項.如下面JSP代碼所示:

這個隱藏表單項的值token是在服務器返回表單頁面時在服務器中生成并保存于Session中的唯一確定的標識.當用戶提交表單時,需要在服務器中對客戶端傳入的subToken與當前Session中保存的subToken進行判斷.如果subToken的值一致,則說明用戶沒有重復提交了表單;否則說明用戶多次提交表單.工作過程如圖3所示:

3.3 通過request實現信息提示和跳轉

大部分Web應用會涉及用戶登錄,用戶登錄實現中會應用request相關方法.在用戶成功登錄后應用sendRedirect(String location)方法重定向到其他頁面.而在用戶登錄失敗后,可以用setAttribute()方法設置提示語,并請求轉發到登錄頁面,對用戶進行友好提示.不難發現一次請求在多次請求轉發中request中的數據可多次使用.具體代碼如下所示:

request.setCharacterEncoding("UTF-8");

String username = request.getParameter("username");

String password = request.getParameter("password");

User login = null;

try {

login = login(username,password);

} catch (SQLException e) {

e.printStackTrace();

}

if(login!=null){

response.sendRedirect(request.getContextPath());

}else{

request.setAttribute("loginInfo", "用戶名或密碼錯誤");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

3.4 實現頁面訪問量統計的實例

在一些特定的業務中需要統計Web站點上的一個特定頁面的訪問次數,要完成統計功能,可以使用ServletContext對象來保存訪問的次數.通過調用setAttribute()方法可以設置ServletContext對象中的共享信息,而調用getAttribute()方法可獲得ServletContext對象中的共享信息.通過以上兩個方法可實現對訪問次數的統計,但也應該考慮到線程安全的問題,所以需要使用synchronized關鍵字對ServletContext對象進行同步.具體代碼實現如下:

ServletContext context = getServletContext();

Integer count = null;

synchronized(context)

{

count = (Integer) context.getAttribute("counter");

if (null == count) {

count = new Integer(1);

} else {

count = new Integer(count.intValue() + 1); }

context.setAttribute("counter", count);

4 技術對比

本文介紹了Cookie、Session、Request Scope、Context Scope,以上四個技術均是用來存儲客戶端信息的.但是其存儲的位置卻有差別,Cookie將信息存儲在客戶端的瀏覽器緩存之中,而其余的Session、Request Scope、Context Scope將客戶端相關信息存儲在服務器中.其中Session、Request Scope、Context Scope在Servlet中擁有相同的對數據操作的API(如圖1所示).

由于其在服務器內部創建過程不同,導致四種技術的作用范圍不同.其中ServletContext中的數據可以被所有用戶共用;而Cookie、Request,、Session是完全隔離,不同用戶數據之間互不影響(如圖5所示).

正是由于這些技術差異,使得Web應用開發顯得生機勃勃,使得許多Web應用的實現變得更加方便.

5 總結

會話跟蹤技術的出現是為了便于服務器端區分各個客戶端狀態,并保持用戶訪問的連續的狀態.正是由于會話跟蹤技術以及JavaWeb中域對象的出現,簡化了服務器端的程序設計,使得許多Web應用中的業務實現變得更加方便.但是也帶來了一些挑戰,例如用戶信息安全問題、多端Session的統一問題、分布式Session的同步、跨域問題等[6].這些問題需要開發人員在實際開發中進一步的完善和攻克.

參考文獻:

〔1〕李馥娟.基于Cookies的Web應用分析及其安全研究[J].網絡安全技術與應用,2009(08):63-67.

〔2〕柳麗娜.淺淡Session機制與Cookie機制[J].電腦編程技巧與維護,2008(16):28-29.

〔3〕張瑞興,張翠梅.Cookie和Session機制的初步探討[J].考試周刊,2008(36):170-171.

〔4〕汪美.基于Javaweb內置對象session的仿真[J].科技風,2019(10):74.

〔5〕楊浩,姬鵬華,朱劍英.Java Servlet會話跟蹤技術的應用研究[J].計算機應用,2002(09):45-47.

〔6〕曹海濤,胡牧,蔣厚明.基于集群節點間即時拷貝的會話同步技術研究[J].計算機系統應用,2017,26(03):268-270.

〔7〕曹海濤,胡牧,蔣厚明.基于集群節點間即時拷貝的會話同步技術研究[J].計算機系統應用,2017,26(03):268-270.

〔8〕易威環.Session與Cookie在系統登錄中的綜合應用[J].計算機光盤軟件與應用,2013,16(18):51-52.

主站蜘蛛池模板: 国产产在线精品亚洲aavv| AV网站中文| 奇米精品一区二区三区在线观看| 91精品人妻互换| 99久久精品免费观看国产| 亚洲 欧美 中文 AⅤ在线视频| 亚洲AV人人澡人人双人| 国产精品yjizz视频网一二区| 国产91丝袜| 亚洲精品第一在线观看视频| 久久a毛片| 中文字幕色在线| 亚洲天堂.com| 九九视频在线免费观看| 久久婷婷综合色一区二区| 亚洲午夜久久久精品电影院| 国产亚洲一区二区三区在线| 欧美a在线看| 99视频在线观看免费| 久久午夜夜伦鲁鲁片无码免费| 老司机精品99在线播放| 亚洲国产看片基地久久1024 | 无码高潮喷水专区久久| 亚洲第一综合天堂另类专| 欧美日韩国产综合视频在线观看| 欧美a在线看| 精品亚洲国产成人AV| 无码视频国产精品一区二区| 久久精品嫩草研究院| 无码啪啪精品天堂浪潮av | 中文字幕在线观看日本| 国产99欧美精品久久精品久久| 国产成人亚洲无吗淙合青草| 日韩av资源在线| 日韩精品欧美国产在线| 一级高清毛片免费a级高清毛片| 亚洲女同一区二区| 99热这里只有精品国产99| 国产日韩久久久久无码精品| 久久永久免费人妻精品| 欧美不卡视频一区发布| 亚洲人成网址| 女同久久精品国产99国| 国产三级成人| 草逼视频国产| 亚洲国产中文精品va在线播放| 国模在线视频一区二区三区| 国产亚洲欧美在线中文bt天堂| 色播五月婷婷| 丁香婷婷激情综合激情| 伊人久久精品亚洲午夜| 亚洲aaa视频| 无码日韩精品91超碰| 2020久久国产综合精品swag| 亚洲天堂伊人| 国产一区免费在线观看| 亚洲精品人成网线在线| 国产区在线观看视频| 毛片在线播放网址| 青青热久麻豆精品视频在线观看| 无码电影在线观看| 国产精品亚洲欧美日韩久久| 色综合激情网| 亚洲精品天堂自在久久77| 亚洲天堂久久久| 无码内射在线| 国产亚洲精| 欧美伦理一区| 亚洲欧美日韩中文字幕一区二区三区 | 99国产精品免费观看视频| 99尹人香蕉国产免费天天拍| 亚洲区一区| 国产乱人乱偷精品视频a人人澡| 精品三级在线| 成人福利免费在线观看| 在线播放真实国产乱子伦| 青青青国产视频| 9久久伊人精品综合| 亚洲天堂777| 国产在线第二页| 亚洲欧美激情另类| 中文字幕首页系列人妻|