首頁  >  文章  >  後端開發  >  誰能生動解釋下會話怎樣理解,能舉例嗎~

誰能生動解釋下會話怎樣理解,能舉例嗎~

WBOY
WBOY原創
2016-08-04 09:21:40886瀏覽

瀏覽器每開啟一個頁面,都算建立一個新的會話嗎?

回覆內容:

瀏覽器每開啟一個頁面,都算建立一個新的會話嗎?

會話是維護某些連續訪問狀態的,HTTP是無狀態的,你先打開http://www.xxx.com/1/ 再打開http://www.xxx.com/2/ 或者你刷新了一下頁面,在伺服器這邊我怎麼知道你是同一個人? IPv4 不可靠,你一個公司可能就一個外部 IP,如果再經過幾級非透明的代理,就更沒準了。

但是這種想要維持狀態需求是硬需求呀,總的解決呀。如是就想出只要每次請求,都帶一個標明唯一身分的ID不就搞定了,如果第一次沒帶,就給他指定一個。在特定的實作裡,通常透過Cookie 或附加在URL 上傳遞,這個ID 也就是SessionID,通常不同的服務端環境會有固定的名稱,例如PHP 的通常叫做PHPSESSID, Servlet 的通常叫做jsessionid 等等,當然你可以取個其他名字,只要達成傳遞"標示身分的ID"這一目的即可。

再說說服務端的 SESSION 是怎麼回事。服務端對 SESSION 來說就等於有個 Key-Value 資料庫,這個函式庫可以是檔案系統,也可以是其他關聯式資料庫、鍵值資料庫。透過瀏覽器送過來的 SessionID,取出對應的 Session 數據,這個數據,就是通常說的會話數據了。


你提到“瀏覽器每打開一個頁面,都算建立一個新的會話嗎?”,這個問題很好,這裡要說下會話的生命週期,其實應該分兩塊講,一個是會話ID的生命週期,一個是會話資料的生命週期。

會話ID的生命週期:目前比較普遍的傳遞SessionID 的方法是透過Cookie 來傳遞,一條Cookie 記錄大概有這麼多屬性:名稱、取值、路徑、網域、過期時間等,你提到的「打開一個頁面”,我想應該糾正為“打開瀏覽器”,這種過期時間通常稱為會話期,也就是關閉、重開瀏覽器,原cookie就失效(亦即不再傳遞了)。但並非所有SessionID 的過期都必須如此,你可以為你的sessionid 的cookie 設定有效期,並且可以在每次訪問時都加長這個時間,這樣即使關閉再開瀏覽器,只要用戶不手動清空cookie 都可以繼續傳遞,繼續記住你的狀態。

會話資料的生命週期:在服務端,我們同樣可以為 Session 設定一個過期時間,如超過 30 分鐘無讀寫就失效(也即刪除或不回傳)。當然,不同的服務端軟體環境,可能有不同的對此時間的預設設定和設定方法。


再說說登入的事。

用戶登入跟這個 Session 有什麼關係呢?簡單來說,登入就是在你的Session 資料裡記錄了你的使用者身份,亦即將當前SessionID 與使用者(ID) 直接進行了關聯,當然如果你樂意,你的SessionID 可以與使用者ID完全等同(最好加密或混淆)。

Session 跟登入狀態並沒必然的關係,例如你上某電商網站,你不登入也一樣的把商品放到你的購物車,對電商網站來說,他可以把你的購物車資料放在Session,Cookie,LocalStoreage,SesisonStoreage 都行,第一個在服務端,第二個客戶端、服務端同步傳遞,後兩個是純客戶端的。不管什麼辦法,此時對電商網站來說只需要知道某個臨時客戶ABCDEF(SessionID) 拿了這一堆東西,到你要結帳時才需要你登入表明身份,好讓你付錢並寄送到你早已填好的地址。如果這個電商覺得他跟你之後的交易也不多(一錘子買賣),根本不想知道你是誰,付款流程也很簡單(掃掃二維碼),他完全可以不需要你登入。

最明顯的例子是眾多的廣告平台,到處嵌碼來追蹤你的Cookie (其實就是記錄和分析你的一些瀏覽狀態、瀏覽歷史),這樣他就知道你去過哪些網站,都喜歡什麼內容,就可以定向給你推送廣告了。但為了避免不必要的麻煩,他並不想知道你具體是誰(或不願你知道他的存在),他就可以不需要給你彈那麼個登錄對話框了;這種情況下,你在他的平台是「匿名」的,但他仍然可以了解你很多。


因為自己以前做過多年網路廣告領域的開發,每次跟人解釋廣告這個例子的時候,別人都很害怕,怎麼「種」個 cookie 就能「追蹤」我的瀏覽紀錄了?

不是這樣的。

廣告平台會跟內容網站合作,讓內容網站嵌入一小段程式碼,這個程式碼可以是一個js、或<script> 標籤、或<iframe> 標籤、或<img / alt="誰能生動解釋下會話怎樣理解,能舉例嗎~" > 標籤,總之需要做到你開啟此頁面時,瀏覽器也會去請求下廣告平台的某個URL 地址,廣告平台透過此請求帶過的參數、Referer 等,分析得出你看的是什麼類型的內容、停留多久等等,記錄下需要的訊息,並分析出你的興趣、嗜好。例如你常看手機評測的網頁,廣告平台得出你近期喜歡智慧型手機的結論,甚至還能據此分析出你喜歡低價位還是高價位的手機,然後給你打上標籤,這樣給你的廣告就能重點推播符合你興趣的廣告了。 </script>

也就是說,沒嵌追蹤程式碼的網站,他也無從追蹤你的腳步。

壞消息是,你以為都白給你看嗎?

那麼有沒有辦法「防禦」呢?答案是肯定的,因為通常來說,你造訪的網站的網域和廣告平台的並不一致,所以… 我也懶得敲了,參見:http://baike.sogou.com/v63400314.htm?fromTitle= Do+Not+Track

當然了,俗話說“道高一尺魔高一丈”,這場“戰爭”沒那麼容易結束。


哥們,我寫這麼多容易嗎?你好歹給按個讚吧 ^________^。

你在街上碰到了一個女孩,注意,是碰到,不是見到,就是一次會話,因為產生了接觸(也就是session_id),然後留了電話號碼,那麼session裡面就有值了,如果只是碰到女孩的衣服,沒碰到皮膚,表示女孩關閉了cookie,你是沒有session_id的,除非那個女孩是你女朋友,你早就在她身上修改了配置

可以理解 session ,而不是 會話,雖然他們可能是一個意思
然後理解 session + cookie

我的理解,打開瀏覽器,訪問一個網站時,開啟一個 session,然後在你後續的訪問瀏覽這個網站中,都算在這個 session 內,直到你關掉了瀏覽器,結束。

這個不是能不能算,而是後台自己寫的,如果,你進入網站,後台就加個session,那就算加了一個會話。但大多數不是這麼幹的,一般都是登入後根據你的username添加個session(所以大多數網站都想讓你登錄,防止它忘記你的​​資訊),他是用來記錄你所有的資料(後台要根據需求把需要的數據放到session裡面,是要自己寫程式碼的),這些數據對於這個人是屬於公共的數據,在大多數的地方都可以直接使用

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn