❶ session和cookie的概念是什麼,兩者的區別是什麼
Session和Cookie的定義以及區別
1、session保存在伺服器,客戶端不知道其中的信息;cookie保存在客戶端,伺服器能夠知道其中的信息。
2、session中保存的是對象,cookie中保存的是字元串。
3、session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置 了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的。
4、session默認需要藉助cookie才能正常工作。如果客戶端完全禁止cookie,session,這種方法將失效。但是如果伺服器端啟用了url編碼,也就是用URLEncoder.encode("index.jsp?id=3","UTF-8");..把所有的url編碼了,則會在url後面出現如下類似的東西index.jsp:jsessionid=fdsaffjdlksfd124324lkdjsf?id=3伺服器通過這個進行session的判斷。
5 session在用戶會話結束後就會關閉了,但cookie因為保存在客戶端,可以長期保存
6 cookie:是服務端向客戶端寫入的小的片段信息。cookie信息保存在伺服器緩存區,不會在客戶端顯現。當你第一次登陸一個網站,伺服器向你的機器寫得片段信息。你可以在Internet選項中找到存放cookie的文件夾。如果不刪除,cookie就一直在這個文件夾中。
詳細資料:http://hi..com/yfdong21/blog/item/0e18cbf489b90164ddc4741f.html
為什麼會有cookie呢,大家都知道,http是無狀態的協議,客戶每次讀取web頁面時,伺服器都打開新的會話,而且伺服器也不會自動維護客戶的上下文信息,那麼要怎麼才能實現網上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變數的值保存在伺服器端,通過 SessionID來區分不同的客戶,session是以cookie或URL重寫為基礎的,默認使用cookie來實現,系統會創造一個名為 JSESSIONID的輸出cookie,我們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲於瀏覽器內存中的,並不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把瀏覽器的cookie禁止後,WEB伺服器會採用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到sessionid= KWJHUG6JJM65HS2K6之類的字元串。
明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在於客戶端硬碟上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如 session cookie安全了。
通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把sessionid保存在persistent cookie中,然後在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結合我們就實現了跨窗口的session tracking(會話跟蹤)。
在一些WEB開發的書中,往往只是簡單的把Session和cookie作為兩種並列的http傳送信息的方式,session cookies位於伺服器端,persistent cookie位於客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯系和區別,我們就不難選擇合適的技術來開發WEB service了。
(1)
session總是放在伺服器上的,每個客戶會跟一個sessionID對應。因為HTTP是無連接的,如何區分同一個客戶的多次請求呢,就需要客戶端每次發請求的時候,發送相應的sessionID。
通常情況下,sessionID在客戶端以cookie的形式保存。如果瀏覽器靜止了cookie,客戶端再向伺服器發請求的時候,就不會發送sessionID,因此伺服器就會將這個請求作為一個新客戶,所以就會出現session值丟失的假象。
這時候出現一個問題,如果客戶瀏覽器不支持cookie,怎麼辦?J2EE提供的另一個辦法就是URL重寫,寫超鏈接的時侯,總是用response.encodeURL(url),連接就會變成*.jsp?sessionID=......,完成了原來用cookie完成的功能。
J2EE建議,不論客戶瀏覽器是否支持cookie,伺服器端編程都建議使用URL重寫。
(2)
web上用的都是非連接的網路協議
session 是存在伺服器上的
每個session有一個唯一的session ID(為了標識他是那個客戶端的)
在啟動session的同時,會在客戶端生成cookie,伺服器把session ID加到cookie中
每次伺服器和客戶端交互的時候,就是從cookie中取得session ID 來定位伺服器上的session
這樣只要你的cookie不過期,伺服器上有你的session,就不會出問題
(3)
JSP實現在瀏覽器關閉cookies情況下的會話管理
通常,會話管理是通過伺服器將 Session ID 作為一個 cookie 存儲在用戶的 Web 瀏覽器中來唯一標識每個用戶會話。如果瀏覽器不支持 cookies,或者將瀏覽器設置為不接受 cookies,我們可以通過 URL 重寫來實現會話管理。
實質上 URL 重寫是通過向 URL 連接添加參數,並把 session ID 作為值包含在連接中。然而,為使這生效,你需要為你的 servlet 響應部分的每個連接添加 session ID 。
把 session ID 加到一個連接可以使用一對方法來簡化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 來對 URL 進行編碼。
encodeURL () 及 encodeRedirectedURL () 方法首先判斷 cookies 是否被瀏覽器支持;如果支持,則參數 URL 被原樣返回,session ID 將通過 cookies 來維持。
來看下面的例子,兩個 JSP 文件:hello1.jsp 和 hello2.jsp,及它們之間的影響。我們在 hello1.jsp 中簡單的創建一個會話,並在 session 中存儲一個對象實例。接著用戶可以點擊頁面的連接到達 hello2.jsp。在 hello2.jsp 中,我們從 session 中獲取原先放置的對象並顯示它的內容。注意,我們在 hello1.jsp 中調用了 encodeURL() 方法來獲得 hello2.jsp 的鏈接,使得在瀏覽器停用 cookies 的情況下,session ID 自動添加到 URL,hello2.jsp 仍能得到 session 對象。
首先在啟用 cookies 的情況下運行。然後關閉對 cookie 的支持,重啟瀏覽器,再運行一次。每次你都可以看到會話管理在起作用,並能在頁之間傳遞信息。
注意,如果你想讓這個例子能在關閉了 cookies 的瀏覽器中工作,你的 JSP 引擎必須支持 URL 重寫。
❷ COOKIE和SESSION有什麼區別
session是存儲在伺服器端的,cookie是存儲在客戶端的,所以session的安全性要高於cookie。
再者,我們獲取的session里的信息是通過存放在會話cookie里的sessionId獲取的。
因為session是存放在伺服器里的,所以session里的東西不斷增加會增加伺服器的負擔,我們會把一些重要的東西放在session里,不太重要的放在客戶端cookie里。
cookie分為兩大類,一個是會話cookie和持久化cookie,他們的生命周期和瀏覽器是一致的,瀏覽器關了會話cooki也就消失了,而持久化會存儲在客戶端硬碟中。
❸ 簡述cookies和session的區別
1、cookie 和session的區別是:cookie數據保存在客戶端,session數據保存在伺服器端。
2、兩個都可以用來存私密的東西,同樣也都有有效期的說法,區別在於session是放在伺服器上的,過期與否取決於服務期的設定,cookie是存在客戶端的,過去與否可以在cookie生成的時候設置進去。
(1)、cookie數據存放在客戶的瀏覽器上,session數據放在伺服器上 ;
(2)、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,如果主要考慮到安全應當使用session ;
(3)、session會在一定時間內保存在伺服器上。當訪問增多,會比較佔用你伺服器的性能,如果主要考慮到減輕伺服器性能方面,應當使用COOKIE ;
(4)、單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K;
(5)、所以將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中。
3、cookie和session的共同之處在於:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。
4、cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬碟上,可以用來在某個WEB站點會話間持久的保持數據。
❹ 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應用程序開發者造成很大的困擾。
❺ web開發中在一次會話過程中Session會發送給瀏覽器一個名為JESSIONID的Cookie,那麼該Cookie的有效期為多少
有效期為當前瀏覽器的生命周期,即到瀏覽器關閉後該JESSIONID過期!再打開瀏覽器時,JESSIONID值就變了!