程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 新手菜鳥必讀:session與cookie的區別

新手菜鳥必讀:session與cookie的區別

編輯:PHP綜合

session和cookie是網站浏覽中較為常見的兩個概念,也是比較難以辨析的兩個概念,但它們在點擊流及基於用戶浏覽行為的網站分析中卻相當關鍵。基於網上一些文章和資料的參閱,及作者個人的應用體會,對這兩個概念做一個簡單的闡述和辨析,希望能與大家共同探討下。

session和cookie的最大區別在於session是保存在服務端的內存裡面,而cookie保存於浏覽器或客戶端文件裡面;session是基於訪問的進程,記錄了一個訪問的開始到結束,當浏覽器或進程關閉之後,session也就“消失”了,而cookie更多地被用於標識用戶,它可以是長久的,用於用戶跟蹤和識別唯一用戶(Unique Visitor)。

關於session

session被用於表示一個持續的連接狀態,在網站訪問中一般指代客戶端浏覽器的進程從開啟到結束的過程。session其實就是網站分析的訪問(visits)度量,表示一個訪問的過程。

session的常見實現形式是會話cookie(session cookie),即未設置過期時間的cookie,這個cookie的默認生命周期為浏覽器會話期間,只要關閉浏覽器窗口,cookie就消失了。實現機制是當用戶發起一個請求的時候,服務器會檢查該請求中是否包含sessionid,如果未包含,則系統會創造一個名為JSESSIONID的輸出 cookie返回給浏覽器(只放入內存,並不存在硬盤中),並將其以HashTable的形式寫到服務器的內存裡面;當已經包含sessionid是,服務端會檢查找到與該session相匹配的信息,如果存在則直接使用該sessionid,若不存在則重新生成新的 session。這裡需要注意的是session始終是有服務端創建的,並非浏覽器自己生成的。

但是浏覽器的cookie被禁止後session就需要用get方法的URL重寫的機制或使用POST方法提交隱藏表單的形式來實現。

這裡有一個很關鍵性的注意點,即session失效時間的設置,這裡要分兩方面來看:浏覽器端和服務端。對於浏覽器端而言,session與訪問進程直接相關,當浏覽器被關閉時,session也隨之消失;而服務器端的session失效時間一般是人為設置的,目的是能定期地釋放內存空間,減小服務器壓力,一般的設置為當會話處於非活動狀態達20或30分鐘時清除該 session,所以浏覽器端和服務端的session並非同時消失的,session的中斷也並不一定意味著用戶一定離開了該網站。目前Google Analytics和Omniture都定義當間隔30分鐘沒有動作時,算作一次訪問結束,所以上圖中session的最後一步不只是離開,也有可能是靜止、休眠或者發呆的狀態。

還有一點需要注意,就是現在的浏覽器好像趨向於多進程的session共享,即通過多個標簽或頁面打開多個進程訪問同一網站時共享一個 session cookie,只有當浏覽器被關閉時才會被清除,也就是你有可能在標簽中關閉了該網站,但只要浏覽器未被關閉並且在服務器端的session未失效前重新開啟該網站,那麼就還是使用原session進行浏覽;而某些浏覽器在打開多頁面時也可能建立獨立的session,IE8、Chrome默認都是共享 session的,在IE8中可以通過菜單欄中的文件->新建會話來建立獨立session的浏覽頁面。

關於cookie 

cookie 是一小段文本信息,伴隨著用戶請求和頁面在Web服務器和浏覽器之間傳遞。用戶每次訪問站點時,Web應用程序都可以讀取cookie包含的信息。

session的實現機制裡面已經介紹了常見的方法是使用會話cookie(session cookie)的方式,而平常所說的cookie主要指的是另一類cookie——持久cookie(persistent cookies)。持久cookie是指存放於客戶端硬盤中的 cookie信息(設置了一定的有效期限),當用戶訪問某網站時,浏覽器就會在本地硬盤上查找與該網站相關聯的cookie。如果該cookie 存在,浏覽器就將它與頁面請求一起通過HTTP報頭信息發送到您的站點,然後在系統會比對cookie中各屬性和值是否與存放在服務器端的信息一致,並根據比對結果確定用戶為“初訪者”或者“老客戶”。

持久cookie一般會保存用戶的用戶ID,該信息在用戶注冊或第一次登錄的時候由服務器生成包含域名及相關信息的cookie發送並存放到客戶端的硬盤文件上,並設置cookie的過期時間,以便於實現用戶的自動登錄和網站內容自定義。

Apache自帶的mod_usertrack模塊可以在用戶首次來到當前網站的時候給用戶種下一個唯一的cookie(較長時間過期),這個 cookie是用戶首次來當前網站的IP地址加上一個隨機字符串組成的。同時在自定義WEB日志中在最後增加%{cookie}n字段可以實現 cookie在apache日志中的輸出,用於數據統計與用戶跟蹤。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved