session和cookie的理解
session和cookie的理解:
當前問題現狀:
想象一個包含“頁面 A”和“頁面 B”的網站,假設一個遊客先看了 A,然後在跳轉到 B。 HTTP是無狀態協議,因此,如果一個典型的 web伺服器正在管理這個站點,那麼當訪問者瀏覽到 B時,在 A上手機的任何知識都會丟失,換句話說,B不能利用訪問者提供的任何資訊。
為了繞過這個限制,應用伺服器會檢測訪問者(即遊客哈)何時首次進入網站。此時,應用伺服器將啟動此訪問者的會話。在前面的示例中,當訪問者請求A時,應用伺服器將啟動會話。網站設計人員可以使用A來收集訪問者的資訊,並將這些資訊儲存在會話變數中。會話變數中的資訊對所有後續頁面都可用。例如,如果路人甲向A提供他的年齡,A的設計人員將年齡寫入一個session變數,那麼B可以很容易地訪問路人甲的年齡。
會話變數包含會話期間可用的值。當會話結束時,應用伺服器將銷燬與會話相關的會話變數。每個會話變數都消耗應用伺服器上的記憶體,因此建立不必要的會話變數會影響效能。
session:
由web站點建立/維護的會話變數
在建立會話時,WebCenter站點會自動建立以下會話變數:
會話變數 |
釋義 |
SessionVariables.currentUser |
遊客登入的id |
SessionVariables.currentAcl |
該遊客所屬的所有ACLs。如果遊客沒有顯式登入,則預設ACL為瀏覽器。 |
SessionVariables.username |
此遊客登入的使用者名稱。如果遊客沒有顯式登入,預設使用者名稱為DefaultReader。 |
SessionVariables.iniFile |
包含web站點屬性的檔案的名稱 |
舉例“登入和退出”:
當遊客第一次訪問站點時,Web站點會建立一個會話,並在遊客中隱式地將其日誌記錄為DefaultReader。在會話期間,如果遊客顯式地登入,Web站點會自動更新SessionVariables.currentUser,SessionVariables.currentAcl,SessionVariables.username。登入不會影響任何其他會話變數的值。換句話說,如果頁面在登入之前建立會話變數,那麼這些值在登入之後仍然有效。當一個遊客顯式地登出時,Web所生成的會話變數會自動恢復到在登入之前所持有的值。
例如,考慮順序如下:
1、遊客首先訪問一個頁面,username的值是DefaultReader。
2、遊客登入為“路人甲”,那麼username的值就是“路人甲”。
3、如果“路人甲”登出,則username的值更新為DefaultReader。
session的生命週期:
當訪問者第一次訪問您的網站時,會話就開始了。下列任何一項發生時,會議結束:
1、訪問者關閉瀏覽器。
2、會話超時了。Web伺服器站點使用timeout屬性設定應用伺服器中的會話超時值。如果將此屬性設定為300,那麼使用者會話將在300秒或5分鐘內無效。
3、系統管理員停止應用程式伺服器。(也就是停掉服務)
cookie:
cookie是應用程式(即web服務站點)寫入遊客瀏覽器的字串。cookie儲存會話之間的遊客資訊。遊客的瀏覽器將該字串寫入遊客磁碟上的一個特殊cookie檔案。當遊客返回到您的網站時,遊客的瀏覽器將cookie的副本傳送回設定它的web伺服器。一旦建立了一個cookie,它就可以作為一個變數用於頁面上。
例如,您的應用程式可能將遊客最喜歡的運動隊儲存在一個cookie中。然後,當遊客返回時,應用程式可以檢索cookie並使用它的資訊在橫幅中顯示這些資訊。
Cookie屬性:
屬性 |
值 |
name |
cookie的名稱。它還充當包含cookie值的傳入變數的名稱。 重要提示:Web站點頁面上下文中的cookie被視為變數。因此,當cookie和資產屬性共享相同的名稱時,它們被視為相同的變數。 |
expiration |
時間,以秒為單位,此後cookie不再被髮送到web伺服器。 |
security |
可選地在cookie上設定安全性。 |
URL |
限制僅在此URL上傳送cookie |
Domain |
限制只將cookie傳送到指定域中的url。 |
因為cookie中的資訊是關鍵的,cookie是一種安全威脅,一些遊客設定瀏覽器來拒絕儲存cookie。應用程式必須為此做好準備。
Cookie的生命生命週期:
1、當不再需要cookie時,可以刪除它們。
2、過期
提示和技巧:
1、在叢集中,必須跨叢集成員複製會話狀態。在叢集中,儘量將會話大小保持在最小;不要為每個客戶端儲存超過2千位元組的會話資料。
2、確定合理的會話超時值。設定太大的超時會佔用系統資源。設定太小會迫使訪問者以惱人的頻率登入。
3、客戶端禁用cookie則可url訪問地址後加上會話ID
例如:FlushServer?reset=true&username=username&password=password&
ssid=sessionID
原創,轉載請註明出處ofollow,noindex" target="_blank">微笑空間站