原諒我以前的努力來解釋問題。這是我在這裏的第一篇文章,我需要一些縮小實際問題的練習。當我瀏覽到包含此代碼出現Submit
按鈕的頁面:我已經剝奪了一些PHP代碼來演示該問題:PHP代碼複製nocache = 1功能
<?php
session_start();
$message = "";
if($_SERVER['REQUEST_METHOD'] === 'POST') {
if(empty($_SESSION['token1'])) {
$message = "After post SESSION(token1) is not present<br/><br/>";
} else {
$message = "After post SESSION(token1) is present<br/><br/>";
}
}
$_SESSION['token1'] = "abcxyz";
?>
<html>
<body>
<?php
echo $message;
?>
<form action="" name="frmLogin" id="frmLogin" method="POST" accept-charset="utf-8">
<input type="submit" name="cmdSubmit" value="Submit" />
</form>
</body>
</html>
方案1。當我點擊那個按鈕時,它會顯示「在post SESSION(token1)不存在後」(緊接着是Submit
按鈕)。當我再次單擊該按鈕時,它會顯示「後會話(token1)存在」。場景2:當我通過追加「?nocache = 1」瀏覽到包含此代碼的頁面時,在第一次單擊後顯示「在post SESSION(token1)存在後」。方案3:當我在本地PC上的本地主機上瀏覽本頁時(即使沒有「?nocache = 1」),在第一次點擊之後,它顯示「存在post SESSION(token1)後」。
一種看法,即有一定幫助:在方案1的頁面後最初加載我檢查了瀏覽器的cookies爲域,看有沒有PHPSESSID cookie存在。點擊Submit
一次後,cookie就在那裏。對於情景2和情景3,首次加載頁面後(並且在點擊Submit
之前),PHPSESSID cookie存在。在每一種情況下,我都會在瀏覽頁面之前清除域名的Cookie。
正如你所看到的,在會話開始,會話變量被設置。那麼爲什麼在第一次回傳後沒有被識別呢?而且,更重要的是,如何在每個環境中首次加載頁面後對其進行編碼?
我首先想到的是,由於加入「?非緩存= 1」的URL使它在所有環境中,正常工作,如果我能以某種方式代碼PHP複製這種行爲,將解決這個問題。但我願意接受建議。
我已經與會議的工作,但承認這當前經驗我難住了。我沒有看到我的問題沒有意義(嚴格來說,我的問題是第一段 - 其餘僅僅是上下文以防它有幫助)。 當我使用「?非緩存= 1」,一個會話cookie(PHPSESSID)瀏覽到一個頁面被立即創建,一切都會按計劃進行。當我瀏覽沒有「?nocache = 1「,它需要在創建PHPSESSID cookie之前進行一些回傳,並且會話變量是完全可用的。我知道會話存儲在服務器上,但是需要cookie。 – Bob
因此,問題是,可以將「?nocache = 1」創建的行爲編碼,以便它不需要成爲URL的一部分? – Bob
我終於明白你在問什麼,並且我發佈了一個答案。 – developerwjk