基於HTTP協議的C/S架構中服務器如何獲取用戶身份

基於HTTP協議的C/S架構中服務器如何獲取用戶身份


HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關係。如果服務器需要辨別正在訪問的用戶信息有以下幾種方法:
1、請求消息中的一些包含用戶信息的HEADERS。
2、客戶端IP地址;
3、用戶登錄ID和密碼;
4、FAT URL,即在URL中嵌入用戶信息;
5、使用Cookies。

實現用戶身份識別的通常做法是:讓瀏覽器在發送請求消息時在其中加入一些能夠擁有用戶身份識別的頭域,如下表:


上表中,From頭域是用戶Email地址,顯然,這種做法會泄露用戶的私人信息,不夠安全,很多瀏覽器不會允許這樣做的。

User-Agent通常是指用戶正在使用的瀏覽器版本,例如IE7、IE9、Chrome這樣的值,這個信息對用戶身份識別來說沒什麼用,充其量也只是反應當前客戶的一些軟件偏好。

Referer是指用戶是從哪裏鏈接到該網頁的,例如一個用戶通過google搜索到一個需要的網站,那麼它在訪問該網站時就會包含一個Referer頭域: http://www.google.com這樣的頭域信息,這也能反應用戶的某種上網習慣。

Authorization頭域包含了用戶的登錄名和密碼信息,這是一種應用非常廣泛的用戶身份識別手段,可以讓服務端直接獲取用戶的身份,並作出相應的授權。

Client-ip也能反應用戶的地址信息,例如我們在訪問有些BBS時,頁面上會顯示歡迎來自XX省XX市的網友,服務器就是根據請求消息中的客戶端IP地址來識別用戶的地域信息。但這種方法對於動態IP地址通常會顯示錯誤,尤其是那些只有一個統一出口的私網,該私網內所有用戶的訪問都會通過NAT映射爲相同的出口IP地址。

X-Forwarded-For是指如果客戶端消息經過 Proxy達到源服務器,那麼Proxy會通過該頭域記錄原始客戶端的IP地址,這樣服務器既能得到Proxy的地址,也能得到真實客戶端的IP。

Cookie是由服務器產生,發給並存儲在Client端瀏覽器的文本文件(一般經過加密)。當用戶再次訪問該服務器時,就會讀取相應的Cookies文件併發給服務器,服務器從而識別出用戶。注意,Cookies的內容不能被緩存!


下面重點介紹cookies:

cookies可以分爲兩類:seesion cookies和persistent cookies。session cookie是一個臨時cookie,它用來跟蹤用戶在瀏覽網頁時的設置,在退出瀏覽器時session cookie會被自動刪除;persistent cookies會一直存放在磁盤文件中(除非用戶手動刪除),它主要用來保存用戶的配置和登陸賬號等信息,這樣,當用戶下次再訪問該網站時,可以不需要再輸入賬號了,瀏覽器會讀取cookies的內容並自動填充用戶表單信息。

當用戶第一次訪問某個網站時,Server對該用戶一無所知,但Server認爲該用戶可能會再次光臨,所以,Server會給該用戶貼上一個唯一的cookie,這樣當用戶再次訪問時,就能輕鬆的認出這個用戶。
Server在響應消息中通過設置Set-Cookie或Set-Cookie2頭域給用戶返回一個cookies(通常包含一個id=value的鍵值對),用來標識當前訪問的用戶。這樣,瀏覽器就存儲了這個cookies,當用戶再次訪問這個網站時,瀏覽器在發送請求消息時會在Cookie頭域中設置對應的id值,Server通過檢索這個id值,就能識別出這個之前到訪過的用戶。整個流程如下圖所示:
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章