2013-02-20 55 views
3

背景:Web服務器何時清除PHP會話標識符?

我想寫定期到Web服務器並檢查連接,如果在特定頁面上的一些信息被改變的腳本。我已經使用bash(用於腳本),curl(用於實際連接)和crontab(用於調度)的組合工作。

由於服務器需要身份驗證,我首先使用curl在登錄頁面上使用我的憑據執行POST請求並保存cookie文件(包含PHPSESSID)。現在我可以使用cookie文件來處理我想要查看的實際網頁的請求。

問題(S):

  1. 什麼時候服務器實際上清楚,我設定我的第一個請求PHPSESSID?我想有時候必須這樣做,否則它會崩潰,因爲它會一直存儲關於每一次開始的會話的信息。

  2. 如果在關閉瀏覽器時清除PHPSESSID有什麼方法可以模擬,即使使用捲曲?

回答

7

這是一個有點不僅僅是更復雜「時,它的清除」

會話在PHP一生。默認值是24分鐘。這意味着,您連接到網站後,直到

  • 你關閉瀏覽器(這不會與捲曲模擬,除非你剛落餅乾)你的會話有效

    OR

  • 24分鐘通過

每次加載一個頁面,服務器調用session_start()是到期時間將被撞到的additiona l 24分鐘(從技術角度來說,實際上它在調用session_start()的頁面上腳本執行結束時碰撞了24分鐘)。

當該cookie實際到期時,您的會話不再有效,並且$_SESSION將在服務器端爲空。 但是,您的數據仍在服務器上,直到下一次服務器執行會話垃圾回收循環以清除過期會話爲止,這取決於服務器上正在使用的會話處理程序,可能會或可能不會真正刪除您的數據。例如,銀行可能會將數據發送到存檔服務器,以防他們需要記錄。

+0

這麼多時間編輯:) – Blacksonic 2013-02-20 13:55:25

+0

@Blacksonic是的,很常見。我傾向於快速發佈,然後在我實際上再次將它們讀回自己之後意識到我想改變的事情。 – 2013-02-20 13:56:16

+0

那麼,這是有道理的。但有一件事:我今天使用我昨天保存的cookie文件設法訪問了頁面。那麼,最好的方法是什麼:繼續重新使用我第一次獲得的sessionID(並且只有在失敗時請求另一個)或者每次請求一個新的sessionID? – MasterF 2013-02-20 14:17:02

3

服務器在最後一次請求之後的會話超時時間結束後刪除會話。這是默認的1440秒(24分鐘),它可以在php.ini文件中更改。

會話在關閉瀏覽器時不會刷新服務器端,客戶端會丟失會話數據,因爲瀏覽器會刪除他的會話本地內存。但是如果你將sessionid保存在某個安全的地方,你可以稍後再使用它,如果你保持在超時框架內。

這正是會話劫持的工作原理,他們以某種方式獲取您的sessionid,然後可以在自己的計算機上設置此sessionid並繼續會話。