如果必須為用戶保留會話,那么可以在用戶的瀏覽器中這樣做。在我們討論如何做之前,首先來看看這種方法的利弊。把會話數(shù)據存放在用戶瀏覽器中的一個好處是,你的系統(tǒng)就不必存儲會話數(shù)據了。在系統(tǒng)中保存會話數(shù)據會有大量的存儲和讀取開銷。不存儲會話數(shù)據,系統(tǒng)就會減輕很多存儲和工作量上的負擔。該方法的第一個好處是,該瀏覽器的請求可以由服務器池中的任何一臺服務器處理。,會把公共數(shù)據存成的瀏覽器中,那么服務器池中的任意一臺服務器都可以處理該瀏覽器的請求。
當然,任何事情都有其折中之處。該方法的一個缺點是必須在瀏覽器和需要該數(shù)據的服務器之間往返地傳遞數(shù)據。對每一個請求都要往返地移動數(shù)據成本很高,尤其是數(shù)據量逐漸變大的情況。注意,不要忽略上面的后半句。雖然現(xiàn)在的會話數(shù)據量可能不太大,但幾十個程序員訪問存儲在 cookie中的數(shù)據,在幾十次發(fā)布后,你就會想為什么頁面載入這么慢呢?另一個非常嚴重的壞處是由 Firefox的插件 Firesheep暴露出來的,即在開放的WiFi網絡中會話數(shù)據很容易被捕捉到,用于惡意登錄別人的賬戶。利用上述插件,來自任何常用的站點(如 Google、 Facebook Twitter和 Amazon等)的會話 cookie都可能受危害。我們會給出一種方法來保護用戶的 cookie不受這種類型的黑客攻擊,這種攻擊通常叫作會話劫持,不過首先還是來談談如何在瀏覽器 cookie中存儲會話數(shù)據。在瀏覽器中存儲會話數(shù)據簡單明了。在PHP中,如下面的示例所示,就是用 cookie名、值、過期日時間、路徑、域和是否加密(是否應該只通要銷毀它,只需要用同樣的設置把過期時間改為time()-3600即2一過HTTPS設置它)作為參數(shù)調用setcookie函數(shù)。在用完該cookie后,即把過期時間設置為為1小日時之前。
有些會話存儲在多個 cookie中,而另一些會話數(shù)據則存儲在一個cookie中。一個要考慮的因素是 cookie的最大大小。根據RFC2965,瀏覽器應該支持至少4KB的 cookie,且應該能支持同一個域中的20個cookie, ni但大多數(shù)瀏覽器把這些作為支持的上限。根據我們前面的觀點,cookie越大,頁面載人就會越慢,因為對于每個請求都要往返地傳遞會話數(shù)據。
既然我們使用 cookie支持會話,那么就要使它們盡可能小,以便系統(tǒng)能夠擴展。接下來的問題是如何保護我們的用戶,使他們免于遭受挾持?顯然,你可以利用HTTPS傳遞一切頁面和cookie。HTTPS采用的安全套接層(SSL)協(xié)議,要求對所有的通信和請求進行加密和解密。然而這可能是銀行站點的需求,未必適用于新聞或社交網站。我們推薦一種至少利用兩個cookie的方法。一個cookie是授權cookie,在每個HTTP頁面上使用 Javascript調用通過HTPS請求,如下所示。這樣就會使大部分數(shù)據(內容、CSS、腳本等)都通過未加密的HTP協(xié)議傳送,而只有授權cookie才通過HTTPS傳送。
要獲得終極的可擴展性,我們還是推薦避免使用會話。但我們理解情況并非總是如此。對于那些一定要有會話的情況,我們推薦把網站設計會話數(shù)據存儲在用戶的瀏覽器上。在實現(xiàn)這點時,控制cookie數(shù)據的大小至關重要。大量的會話數(shù)據會降低頁面載入的性能以及系統(tǒng)中的Web服務器的性能。
本文地址:http://m.hbbqcd.cn//article/3516.html