2009-09-20 39 views
0

緩存非重要頁面(如博客帖子)的HTML輸出確實有助於通過跳過整個系統的加載(以及渲染時間)來加速網站,並且只是吐出預先製作的頁。這將是一種方法,可以讓大量的用戶訪問您的網站索引或任何食用資源。僅通過COOKIE檢查向非成員顯示緩存的數據? (PHP)

但是,緩存頁面的一個問題是,爲了檢查是否枯萎,您可以顯示頁面 - 您必須加載整個系統(和用戶庫)以檢查用戶是否已登錄。 (Wordpress,CodeIgniter,Drupal等)

然後,您可以確定是否可以安全地顯示頁面的緩存版本,或者是否應該爲登錄用戶重新呈現頁面。反之亦然;爲登錄用戶呈現的頁面不應顯示給客人!

無論如何,我終於有一個想法,我可以只使用,如果(空($ _ COOKIE))來測試用戶會話,因爲我從來沒有使用的URL傳遞會話ID。然後我記得,因爲會話庫加載在每個頁面上,可能無法工作,因爲它會在調用session_start()時創建一個cookie。

有誰有關於如何測試用戶會話的任何想法,而無需加載你的數據庫連接 - >您的會話庫 - >你的用戶庫?

回答

1

一旦用戶登錄您可以設置某種會話變量,即

//user has successfully logged in 
$_SESSION['logged_in'] = true; 

然後,在某處你的頁面加載速度非常早期的(任何圖書館都加載之前),你可以這樣做:

@session_start(); 
if(!(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true)) 
{ 
    //not a logged in user, show the cache! 
    load_cache(); //or however this works 
    exit(); 
} 

在註銷,你要麼session_destroy()$_SESSION['logged_in'] = false;

+0

是的,儘管問題是,你還必須加載數據庫和會話處理程序(可能)多系統。這破壞了整個緩存事物的目的。嗯......我想我已經說過了; P – Xeoncross 2009-09-20 20:02:31

+0

@ Xeoncross:你不需要打開數據庫連接來開始會話。 – Kip 2009-09-21 02:56:59

2

我剛剛瞭解到這一點,所以我希望我所擁有的一切直。

爲了訪問保存的會話變量,您必須啓動一個會話。在我正在開發的項目中,「用戶登錄」和「創建新用戶」頁面均以session_start()開始。我也試着測試cookie是否設置好,哪個不好。如果用戶已登錄或不登錄,則無關緊要,因爲這兩個來賓和登錄用戶都會有一個cookie。如果你有一個會話,那麼你會有一個cookie(前提是這就是你如何設置php,這聽起來就像你一樣)。因此,我不測試cookie,而是測試是否設置了會話變量。一旦用戶成功登錄此變量將僅被設置

如果(loginSuccess()){$ _SESSION [「登錄」] =「真」。 }

在此之後,我現在可以測試以查看是否該會話變量設置,並且顯示內容適當。我的用戶可以離開這些頁面,回來,它仍然會記住會話變量。

我確信有這樣做的更好,安全的方法。

+0

是的,問題是,你仍然需要加載數據庫和會話處理程序(可能)大部分的系統。這破壞了整個緩存事物的目的。 – Xeoncross 2009-09-20 20:01:50

0

是的,正如我所說的當前方法涉及裝載系統,數據庫(假設你的會話使用的數據庫),並終於開始這是一種浪費,如果你只是要顯示緩存內容的會議。

也許你可以設置一個除了會話cookie被稱爲「logged_out」(或「LOGGED_IN」)的cookie。然後,您可以在每次加載頁面時測試「logged_out」Cookie,而無需加載會話和數據庫?

實際上,由於您會有機器人和其他非Cookie用戶代理,因此您最好在登錄時創建一個「logged_in」cookie,然後在其他地方檢查是否存在虛假/不存在的cookie作爲客人。

+0

更新:此方法適用於我的系統。 – Xeoncross 2009-11-01 20:18:37