2010-01-21 14 views
4

如果PHP會話變量存儲在文件(就像它在默認情況下),那麼讓我們說我存儲用戶名到一個會話變量...我應該調用一個包含SESSION值的變量,而不是在PHP中調用實際會話嗎?

$_SESSION['username'] = 'Jason Davis'; 

現在,當一個頁面是內置,如果我叫$ _SESSION ['username']在構建頁面的過程中執行100次,是否會觸發會話文件並對它們執行100次讀取?

同樣的事情,但會話被存儲在MySQL中。它會查詢數據庫100次以獲得會話表中的用戶名嗎?

我只是想知道我是否應該在頁面中調用會話變量1次,然後將它存儲到局部變量並將其用於其他99次。像這樣...

$username = $_SESSION['username']; 
echo $username; // 100 times throughout all the files that build my page. 

注意:請意識到這僅僅是一個例子,在現實中,我將需要訪問更多的則只是一個用戶名會話和100倍,最有可能是少,但分佈在多個會話鍵/值

回答

3

不,會在調用session_start時讀取會話數據,並在腳本運行時結束或寫入session_write_close時寫入會話數據。

+0

'$ number_of_times_beaten_by_gumbo_today ++' – 2010-01-21 23:14:26

+0

所以如果我要改變我的會話使用MySQL的有存儲和I調用$ _SESSION [「用戶名」]很多時間過去,它不會讓取我的MySQL會話嗎? – JasonDavis 2010-01-21 23:21:29

+0

@jasondavis:是的,會話數據只在調用session_start時讀取一次,然後存儲在$ _SESSION中。 – Gumbo 2010-01-21 23:59:39

0

只有當您調用session_start()函數時纔會讀取該文件。對於MySQL,如果你進行查詢,獲取用戶名並將其存儲在一個變量中,當然不會有任何額外的查詢。如果你將一些東西存儲在一個變量中,它就是一個副本,並且不需要用你從中獲得的原始值進行操作。

最好的問候, 喇嘛

+0

你好,我意識到這是我將它存儲到一個變量,它不會再次擊中數據庫,我的問題是,如果我不將它存儲到本地變量,PHP會話一遍又一遍地擊中它 – JasonDavis 2010-01-21 23:20:25

+0

在這種情況下,它只是表現像Gumbo,我說過 - 你可以用$ _SESSION做任何你想做的事情,它會像一個「普通」變量,直到你再次調用session_x()函數:) 因此,不必將它存儲在一個局部變量。 但是,如果你不想一次又一次地寫$ _SESSION,我建議這樣做! – lamas 2010-01-21 23:40:51

相關問題