當前位置:首頁 » 網頁前端 » web能實現會話跟蹤嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web能實現會話跟蹤嗎

發布時間: 2022-08-06 17:19:51

1. web開發中會話跟蹤的方法有哪些

1、cookie
2、session
3、隱藏input
4、url重寫
5、ip地址

2. servlet使用的會話跟蹤除session外還有哪些方式

HTTP是一種無連接的協議,如果一個客戶端只是單純地請求一個文件(HTML或GIF),伺服器端可以響應給客戶端,並不需要知道一連串的請求是否來自於相同的客戶端,而且也不需要擔心客戶端是否處在連接狀態。但是這樣的通信協議使得伺服器端難以判斷所連接的客戶端是否是同一個人。當進行Web程序開發時,我們必須想辦法將相關的請求結合一起,並且努力維持用戶的狀態在伺服器上,這就引出了會話追蹤(session tracking)。

1:會話與會話追蹤

session中文經常翻譯為「會話」,其本來的含義是指有始有終的一系列動作或消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候可以看到這樣的話「在一個瀏覽器會話期間……」,這里的會話一詞用的就是其本義,是指從一個瀏覽器窗口打開到關閉這個期間;如果說「用戶在一次會話期間……」這樣一句話,它指用戶的一系列動作,比如從登錄到選購商品到結賬登出這樣一個網上購物的過程;然而有時候也可能僅僅是指一次連接。session的含義很多,其中的差別只能靠上下文來推斷。session tracking(會話追蹤)是指一類用來在客戶端與伺服器之間保持狀態的解決方案,簡單地說,當一個客戶在多個頁面間切換時,伺服器會保存該用戶的信息。

2:實現會話追蹤的4種方式會話追蹤的實現方式有下列4種方式:
(1)使用持續Cookies(Persistent Cookies)。
(2)重寫包含額外參數的URL(URL Rewriting)。
(3)建立含有數據的隱藏表單欄位(Hidden Form Field)。
(4)使用內建session對象。
前三種會話追蹤方式是傳統的做法,每種做法都有缺點。最後一種方法是目前最常用,也是最有效的解決方案,因此在這里將把討論重心放在第4種會話追蹤方式上,然而為求徹底了解會話追蹤的機制,還是先將傳統的會話追蹤方式先做一番介紹。(這里和我的理解不太一樣,記錄下我的理解,Session的機制是 Java Servlet 規范規定的,而tomcat container實現了這個規定,tomcat 是通過cookie 和 url rewriting的方式來實現的,也就是通過cookie 或url rewriting 保存一個seesionID, 這樣在內部tomcat 把這個sesionID和一個Map聯系起來,達到將變數和session聯系起來的目的。所以第一和第二中方法是tomcat或其他servlet container實現session機制的手段,當然我們也可以自己實現。而第三種方法只是在兩個頁面跳轉時傳遞變數的一種方式,要想用這種方式實現sesion機制還是不太現實,要每個頁面都寫下hidden數據,而且要寫下所有要傳的變數。)
2.1:使用Cookie
Cookie是一個小小的文本文件,它是將會話信息記錄在這個文本文件內,每個頁面都去Cookie中提取以前的會話信息。例如:
String sessionID = makeUniqueString();
HashMap sessionInfo = new HashMap();
HashMap globalTable = findTableStoringSessions();
globalTable.put(sessionID, sessionInfo);
Cookie sessionCookie =new Cookie("JSESSIONID", sessionID);
sessionCookie.setPath("/");
response.addCookie(sessionCookie);
上面這段代碼先將會話信息記錄在HashMap中,保存在伺服器端,並用sessionID標識,然後把sessionID保存在名為「JSESSIONID」的Cookie中。

Cookie[] cookies = request.getCookies();

String sessionid = null;

HashMap sessionInfo = null;
HashMap globalTable = findTableStoringSessions();
if(cookies!=null){

for(int i=0;i<cookies.length;i++){

if(cookies[i].getName().equals("JSESSIONID")){

sessionid = cookies[i].getValue();

break;

}

}

if(sessionid!=null){

sessionInfo = globalTable.get(sessionid);

//We can use the sessionInfo to get value that we want

}

}
用戶請求到達伺服器後,先從Cookie中取出sessionID,然後從HashMap中取出會話信息。這樣就實現了會話追蹤。
雖然Cookie強大且持續性高,但是由於有些用戶因為擔心Cookie對個人隱私的威脅,會關閉Cookie,一旦如此,便無法利用Cookie來達到會話追蹤的功能。

2.2:URL重寫
URL重寫是利用GET的方法,在URL的尾部添加一些額外的參數來達到會話追蹤(session tracking)的目的,伺服器將這個標識符與它所存儲的有關會話的數據關聯起來。URL看起來如下:
http://host/path/file.html;jsessionid=1234,
使用URL重寫的優點是Cookie被禁用或者根本不支持的情況下依舊能夠工作。但也有很多缺點:
1. 必須對所有指向您的網站的URL進行編碼。
2. 所有頁面必須動態生成。
3. 不能使用預先記錄下來的URL進行訪問,或者從其他網站鏈接進行訪問。

2.3:隱藏表單欄位
隱藏表單欄位的方法,是利用HTML內hidden的屬性,把客戶端的信息,在用戶不察覺的情形下,偷偷地隨著請求一起傳送給到伺服器處理,這樣一來,就可以進行會話跟蹤的任務了。可以下列的方法來做隱藏表單欄位的會話追蹤。
<input type="hidden" name="userID" value="15">
然後將重要的用戶信息,如ID之類獨一無二的數據,以隱藏欄位的方式傳送給伺服器。隱藏欄位的優點在於session數據傳送到伺服器端時,並不象GET的方法,會將session數據保露在URL之上。不過這種做法還是有它的缺點:一旦session數據儲存在隱藏欄位中,就仍然有暴露數據的危機,因為只要用戶直接觀看HTML的源文件,session數據將會暴露無疑。這將造成安全上的漏洞,特別當用戶數據是依賴於用戶ID、密碼來取得的時候,將會有被盜用的危險。另外這種方法只適用特定的一個流程,不適用於通常意義的會話跟蹤。2.4:使用內建session對象
傳統的會話追蹤方式使用比較麻煩,Servlet的會話機制基於Cookie或URL重寫技術,融合了這兩種技術的優點。當客戶端允許使用Cookie時,內建session對象使用Cookie進行會話追蹤;如果客戶端禁用Cookie,則選擇使用URL重寫。

(1)獲取session對象例如把購物車作為屬性存儲在session中,在其他JSP頁面中可以通過session再獲得購物車。
// 在JSP頁面中可以直接使用session
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
內建的session對象是javax.servlet.http.HttpSession類的實例,如果在JavaBean或者Servlet中使用session就需要先從當前的request對象中取得,例如:
// 得到用戶session和購物籃
HttpSession session = request.getSession();
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");

(2)讀寫session中的數據向session中存入對象使用setAttribute方法,通過getAttribute方法讀取對象。從session返回的值注意要轉換成合適的類型,要注意檢查結 果是否為null。例如下面一段代碼:
HttpSession session = request.getSession();
SomeClass value = (SomeClass)session.getAttribute("someID");
if (value == null) {
value = new SomeClass(...);
session.setAttribute("someID", value);
}
doSomethingWith(value);

(3)廢棄session數據調用removeAttribute廢棄session中的值,即移除與名稱關聯的值。
調用invalidate廢棄整個session,即廢棄當前的session。
如果用戶注銷離開站點,注意廢棄與用戶相關聯的所有session。

(4)session的生命周期由於沒有辦法知道HTTP客戶端是否不再需要session,因此每個session都關聯一個時間期限使它的資源可以被回收。setMaxInactiveInterval(int secondsToLive)


(5)伺服器使用session時,默認使用Cookie技術進行會話追蹤,通常,會話管理是通過伺服器將 Session ID 作為一個 cookie 存儲在用戶的 Web 瀏覽器中,並用它來唯一標識每個用戶會話。如果客戶端不接受Cookie的時候,伺服器可以利用URL重寫的方式將sessionID作為參數附在URL後面,來實現會話管理。當我們在進行forward,redirect時,一定要調用下邊兩個方法,以保持session一直有效(如果不調用的話,那麼你到了新的頁面時session就失效了,因為session ID沒有傳過來)

Servlet中Interface HttpServletResponse 規定了兩個方法,response.encodeURL()或response.encodeRedirectURL()方法,這兩個方法首先判斷Cookies是否被瀏覽器支持;如果支持,則參數URL被原樣返回,session ID將通過Cookies來維持;否則返回帶有sessionID的URL。Tomcat伺服器實現了這兩個方法。

下面是使用encodeURL方法的示例,兩個文件hello1.jsp和hello2.jsp。
a: hello1.jsp的完整程序代碼如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%String url =response.encodeURL("hello2.jsp");%>
<a href='<%=url%>'>進入到hello2.jsp</a>

b: 解釋:
hello1.jsp利用了response對象內的encodeURL方法,將URL做了一個編碼動作。編碼不是這里關心的重點,重點是如果瀏覽器的cookie被禁用的話那麼象;jsessionid= 這樣字元串就會被添加到 hello2.jsp 的後面,也就是告訴了下一個頁面session的信息。b: 若要使用重定向,例如:
response.sendRedirect("hello2.jsp");也應該改為:response.sendRedirect(response.encodeRedirectURL("hello2.jsp"));同時需要注意的是,將session的ID以URL的編碼方式進行時,需將每一頁都編碼,才能保留住session的ID。如果遇到沒有編碼的URL,則無法進行會話跟蹤。

c: hello2.jsp的完整程序代碼如下:
<%@ page contentType="text/html;charset=gb2312"%>
<% out.println("sessionID is "+session.getId());%>

d: 可以看到如果伺服器使用URL重寫,它將會話信息附加到URL上,如下所示:
http://localhost:8080/ch09/hello2.jsp;jsessionid=

e: 實質上 URL 重寫是通過向 URL 連接添加參數,並把 session ID 作為值包含在連接中,以便應用伺服器可以根據sessionID從cache中的取回session.

TOMCAT伺服器

SESSION實現會話跟蹤通常是cookie和url重寫,如果瀏覽器不禁止cookie的話,tomcat優先使用cookie實現,否則它將使用URL重寫來支持SESSION.

URL重寫的額外數據是伺服器自動添加的,那麼伺服器是怎麼添加的呢?Tomcat在返回Response的時候,檢查JSP頁面中所有的URL,包括所有的鏈接,和 Form的Action屬性,在這些URL後面加上「;jsessionid=xxxxxx」。添加url後綴的代碼片段如下:
org.apache.coyote.tomcat5.CoyoteResponse類的toEncoded()方法支持URL重寫。

1 StringBuffer sb = new StringBuffer(path);
2 if( sb.length() > 0 ) { // jsessionid can't be first.
3 sb.append(";jsessionid=");
4 sb.append(sessionId);
5 }
6 sb.append(anchor);
7 sb.append(query);
8 return (sb.toString());

3. 請總結一下WEB開發中的會話跟蹤實現技術都有哪幾種

1、session,也是最常用的一種
2、Cookie
3、地址重寫
4、隱藏域

4. Web防火牆怎麼對TCP協議 惡意用戶所發起會話進行跟蹤 連接

不完全對。 1、TCP確實是有連接的,相對可靠的。而UDP是沒有連接的。 2、除非網路的傳輸會同時使用到TCP協議和UDP協議,否則不會互相影響,也就是限制了一個不會降低流量,大部分的應用都可以依靠單一的協議來完成。 3、TCP協議和UDP協議具有同樣的危險性。防火牆一般不會根據TCP或者UDP來制定安全策略,除非人為進行。防火牆主要按照連接發起方向來工作,默認的內網向外的都是安全的,或者是被提示允許的,而外網向內的則不提示不允許,或被視為攻擊。

5. 關於JAVAEE的一些問題求大神!JavaEE

217976528 J2EE-Weblogic 分享知識的Q群!會話跟蹤也就是客戶端的請求與伺服器端的響應保持數據的一致性,Web應用當然需要會話跟蹤,例如:你在購物的時候,下的訂單,如果不進行會話跟蹤,怎麼會實時的將你的訂單信息顯示出來呢!還有就是你的登錄現象,為什麼瀏覽器會將你的登錄信息一直保持著呢!除非點擊退出(清楚痕跡),這些都是會話技術!

6. Java中如何實現Web的會話跟蹤

會話跟蹤是一種靈活、輕便的機制,它使Web上的狀態編程變為可能。

HTTP是一種無狀態協議,每當用戶發出請求時,伺服器就會做出響應,客戶端與伺服器之間的聯系是離散的、非連續的。

當用戶在同一網站的多個頁面之間轉換時,根本無法確定是否是同一個客戶,會話跟蹤技術就可以解決這個問題。

當一個客戶在多個頁面間切換時,伺服器會保存該用戶的信息。

有四種方法可以實現會話跟蹤技術:URL重寫、隱藏表單域、Cookie、Session。

1).隱藏表單域:<inputtype="hidden">,非常適合步需要大量數據存儲的會話應用。

2).URL重寫:URL可以在後面附加參數,和伺服器的請求一起發送,這些參數為名字/值對。

3).Cookie:一個Cookie是一個小的,已命名數據元素。伺服器使用SET-Cookie頭標將它作為HTTP響應的一部分傳送到客戶端,客戶端被請求保存Cookie值,在對同一伺服器的後續請求使用一個Cookie頭標將之返回到伺服器。與其它技術比較,Cookie的一個優點是在瀏覽器會話結束後,甚至在客戶端計算機重啟後它仍可以保留其值。

4).Session:使用setAttribute(Stringstr,Objectobj)方法將對象捆綁到一個會話

7. WEB應用中的SESSION知多少

目 錄
一、Session
二、Cookies
三、Cookies機制
四、Session機制
五、Cookies機制與Session機制的區別和聯系
六、常見問題
七、Session的用法
Session是WEB上有效的信息交互手段,因其使用方便、穩定、安全、可靠而被眾多WEB開發者所認知。尤其在互聯網身份驗證、網上電子購物等方面的應用更為廣泛。下面就著重來介紹下Session。
一、Session
Session,在漢語中表示通話、會話、對話(期)、話路[對談時間]的意思,其本來的含義一個終端用戶與交互系統進行通信的時間(間隔),通常是指從注冊(進入系統)到注銷(退出系統)之間所經過的時間。比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個Session。有時候我們可以看到這樣的話「在一個瀏覽器會話期間,…」,這里的會話一詞用的就是這個意思,是指從一個瀏覽器窗口打開到關閉這個期間。Session在我們的網路應用中就是一種客戶端與伺服器端保持狀態的解決方案,有時候Session也用來指這種解決方案的存儲結構,
Session對象,就是客戶端瀏覽器與伺服器之間建立的互動信息狀態。每一個不同的用戶連接將得到不同的Session,也就是說Session與用戶之間是一種一對一的關系。Session在用戶進入網站時由伺服器自動產生,並在用戶正常離開站點時釋放。使用Session的好處就在於,可以將很多與用戶相關的信息,例如用戶的帳號、昵稱等保存到Session中;利用Session,可以跟蹤用戶在網站上的活動。例如:當你上網進入一個網站時,如果你沒有登陸,無論你訪問哪幾個頁面都會跳轉回登陸頁。還有就是你在購物時,不可能把你的東西放到別人的購物車里去,這就得用一個信息變數來判斷!
如果能夠提供一些按需生成的動態信息會使web變得更加有用,就像給有線電視加上點播功能一樣。這種需求一方面迫使HTML逐步添加了表單、腳本、DOM 等客戶端行為,另一方面在伺服器端則出現了CGI規范以響應客戶端的動態請求,作為傳輸載體的HTTP協議也添加了文件上載、cookie這些特性。其中 cookie的作用就是為了解決HTTP協議無狀態的缺陷所作出的努力。至於後來出現的Session機制則是又一種在客戶端與伺服器之間保持狀態的解決方案。
二、Cookies
Cookie是WEB上最常用的跟蹤用戶會話方式,當 Cookie被禁止後,一般都用URL重寫來跟蹤會話。Cookie是一種由伺服器發送給客戶的片段信息,存儲在客戶環境中,並在客戶所有的對伺服器的請求中都要發回它。就好比我們在用IE登陸某個電子購物商城時,IE在得到商品列表頁面的 同時還收到Set-Cookie應答頭信息,我們打開一個Cookie文件,我們所看到的格式一般都是:
Cookie:NAME=VALUE;Comment=COMMENT;Domain=DOMAINNMAM;Max-age=SECONDS;Path=PATH;secure;Version=1*DIGIT
其中NAME值對(值對間用分號分隔)是必須的,其餘都是可選的。最重要的信息當然也在所必須的值對里了,VALUE是NAME的值,也是這個 Cookie的標識,Max-age定義了Cookie的最長生存時間。當我們選購了某種商品,向伺服器發送選購清單時,會自動在你的請求信息頭里加上NAME值對,如果Cookie被禁止,則用 URL重寫方式在URL請求地址上附加NAME值對。當Web伺服器收到這個請求後,會檢查該Cookie是否存在,然後相應的跟蹤會話。從以上分析不難理解,其實Web伺服器跟蹤會話就靠Set-Cookie頭信息,跟蹤NAME值對進行身份驗證。假如我們用非Web終端接收Web伺服器的響應信息,從中解析出Cookie頭信息,當再次向Web伺服器發送請求時附加上解析出的Cookie信息,Web伺服器據此不就可以進行身份認證了嗎?
Cookies中文是餅乾的意思,對於為何引用Cookies,從網上查找了一些資料:
在瀏覽器與WEB伺服器之間是使用HTTP協議進行通信的,當某個用戶發出頁面請求時,WEB伺服器只是簡單的進行響應,然後就關閉與該用戶的連接。因此當一個請求發送到WEB伺服器時,無論其是否是第一次來訪,伺服器都會把它當作第一次來對待,這樣的不好之處可想而知。為了彌補這個缺陷,Netscape開發出了cookie這個有效的工具來保存某個用戶的識別信息,因此人們昵稱為「小甜餅」。cookies是一種WEB伺服器通過瀏覽器在訪問者的硬碟上存儲信息的手段:Netscape Navigator使用一個名為cookies.txt本地文件保存從所有站點接收的Cookie信息;而IE瀏覽器把Cookie信息保存在類似於 c:\Internet 臨時文件\的目錄下。當用戶再次訪問某個站點時,服務端將要求瀏覽器查找並返回先前發送的Cookie信息,來識別這個用戶。Cookies給網站和用戶帶來的好處:
(1)、Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑
(2)、Cookie能告訴在線廣告商廣告被點擊的次數,從而可以更精確的投放廣告
(3)、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的情況下進入曾經瀏覽過的一些站點
(4)、Cookie能幫助站點統計用戶個人資料以實現各種各樣的個性化服務,其實,cookie的作用就是為了解決HTTP協議無狀態的缺陷所作的努力.
三.Cookie機制
Cookie機制採用的是在客戶端保持狀態的方案。
Cookie機制,就是當伺服器對訪問它的用戶生成了一個Session的同時伺服器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie,保存在客戶端,裡面記錄著用戶當前的信息,當用戶再次訪問伺服器時,瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大於等於將要請求的資源所在的位置也就是對應的Cookie文件。 若存在,則把該cookie附在請求資源的HTTP請求頭上發送給伺服器,例如:當我們登陸了一個網站,並且填寫了有關資料,以本站會員的名義登陸上了有關網頁,這時你把瀏覽器關閉,再重啟進入該網站的某一個頁面時是以你登陸過的會員進去的,當然,不是所有網站都是這樣,我們知道,cookie的保存有臨時性的和持久性的,大多都是臨時性的,也就是cookie只保存在客戶端的內存中,而沒有保存在硬碟上,當關閉瀏覽器,cookie也就銷毀。以下是有關 cookie機制的一些具體說明:
cookie的內容主要包括:名字,值,過期時間,路徑和域。
其中域可以指定某一個域比如.,相當於總店招牌,比如寶潔公司,也可以指定一個域下的具體某台機器可以用飄柔來做比。
路徑就是跟在域名後面的URL路徑,比如/或者/foo等等,可以用某飄柔專櫃做比。路徑與域合在一起就構成了cookie的作用范圍。
如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的 cookie被稱為會話cookie。會話cookie一般不存儲在硬碟上而是保存在內存里,當然這種行為並不是規范規定的。如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。
存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式。對於微軟的IE瀏覽器,在一個打開的窗口上按Ctrl-N(或者從文件菜單)打開的窗口可以與原窗口共享,而使用其他方式新開的IE進程則不能共享已經打開的窗口的內存cookie;對於火狐狸firefox瀏覽器,所有的進程和標簽頁都可以共享同樣的cookie。一般來說是用javascript的 window.open打開的窗口會與原窗口共享內存cookie。瀏覽器對於會話cookie的這種只認cookie不認人的處理方式經常給採用 Session機制的web應用程序開發者造成很大的困擾。

8. 在伺服器的網路編程中,解決會話跟蹤的方法有哪些

1.1Cookie機制在程序中,會話跟蹤是很重要的事情。理論上,一個用戶的所有請求操作都應該屬於同一個會話,而另一個用戶的所有請求操作則應該屬於另一個會話,二者不能混淆。例如,用戶A在超市購買的任何商品都應該放在A的購物車內,不論是用戶A什麼時間購買的,這都是屬於同一個會話的,不能放入用戶B或用戶C的購物車內,這不屬於同一個會話。而Web應用程序是使用HTTP協議傳輸數據的。HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與伺服器端的連接就會關閉,再次交換數據需要建立新的連接。這就意味著伺服器無法從連接上跟蹤會話。即用戶A購買了一件商品放入購物車內,當再次購買商品時伺服器已經無法判斷該購買行為是屬於用戶A的會話還是用戶B的會話了。要跟蹤該會話,必須引入一種機制。Cookie就是這樣的一種機制。它可以彌補HTTP協議無狀態的不足。在Session出現之前,基本上所有的網站都採用Cookie來跟蹤會話。

9. java中會話在WEB的作用

session:會話。舉個例子吧,編寫一個論壇,就可以用session。用戶登錄之後,打開了多個頁面,但是用戶名是不變的,這就是session起的作用。關閉瀏覽器,session就銷毀了。