[英]session file - when does it get created exactly?
我很想知道會話文本文件的確切創建時間? 一個簡單而表面層面的答案可能是,嗯,當你使用session_start()時。 但是嗎? 當php腳本結束時,它可以一直到最后嗎?
是什么讓我覺得最終可能是因為我知道每當你對頁面的執行繼續進行會話變量的更改時,PHP都不會寫入會話文件。 例如,如果你有類似$_SESSION['x'] = $_SESSION['x'] + 1;
在一個循環中,會話文件並沒有得到在每循環的每次迭代修改。 只有當PHP腳本完成后,PHP引擎才會對文件進行更改,以存儲$_SESSION['x']
的最終值。
使用相同的邏輯,我認為沒有理由讓PHP引擎在調用session_start時立即創建文件。 它可能只是推遲了這個過程。
這需要的是這個;
我可以用session_start()
開始一個會話,設置幾個會話變量,在函數中拋出它們,用它們作為全局變量,在腳本結束時,我取消它們,並銷毀會話,結果,我假設沒有創建了會話文件,因此不會產生與創建會話文本文件相關的開銷。
我想聽聽你對此的見解。
我的目的是探索使用會話變量作為臨時占位符來左右傳遞全局變量的可能性 - 而不處理文件I / O. 實際上,我根本不需要在下一頁中使用這些變量。
在這種情況下,會話證明比在函數內使用全局變量更快嗎?
經過測試,它會立即在session_start
上創建。 但是, session_destroy
也會將其刪除。 經測試:
mkdir sess && cd sess
vim main.php
session_save_path(dirname(__FILE__));
session_start();
sleep(5);
session_destroy();
php main.php &
ls # main.php sess_rm4bcun6ear943mf61mdads190
fg # wait for script to end
ls # main.php
你問題的答案就是答案。 您將_SESSION
用於全局變量目的的想法並不是一個好的...您也可以使用$GLOBALS
。 那里沒有文件IO。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.