php無法傳遞session的解決方法:1、在客戶端開啟cookie;2、檢查瀏覽器問題並實作存取cookie;3、開啟php.ini中的session.use_trans_sid即可。
本文操作環境:windows7系統、PHP7.1版、DELL G3電腦
#PHP中SESSION不能跨頁傳遞問題的解決辦法
在PHP中使用過SESSION的朋友可能會碰到這麼一個問題,SESSION變數不能跨頁傳遞。這令我苦惱了好日子,最後透過查資料思考並解決了這個問題。我認為,出現這個問題的原因有以下幾點:
1、客戶端禁用了cookie
2、瀏覽器出現問題,暫時無法存取cookie
3、php.ini中的session. use_trans_sid = 0或編譯時沒有開啟--enable-trans-sid選項
為什麼會這樣呢?下面我解釋一下:
Session儲存於伺服器端(預設以檔案方式儲存session),根據客戶端提供的session id來得到使用者的文件,取得變數的值,session id可以使用客戶端的Cookie或Http1.1協定的Query_String(就是存取的URL的「?」後面的部分)來傳送給伺服器,然後伺服器讀取Session的目錄。也就是說,session id是取得儲存在服務上的session變數的身分證。當程式碼session_start();運行的時候,就在伺服器上產生了一個session文件,隨之也產生了與之唯一對應的一個session id,定義session變數以一定形式儲存在剛才產生的session文件中。透過session id,可以取出定義的變數。跨頁後,為了使用session,你必須再執行session_start();將會又會產生一個session文件,與之對應產生對應的session id,用這個session id是取不出前面提到的第一個session文件中的變數的,因為這個session id不是打開它的「鑰匙」。如果在session_start();之前加碼session_id($session id);將不產生新的session文件,直接讀取與這個id對應的session文件。
PHP中的session在預設情況下是使用客戶端的Cookie來保存session id的,所以當客戶端的cookie出現問題的時候就會影響session了。必須注意的是:session不一定必須依賴cookie,這也是session相比cookie的高明之處。當客戶端的Cookie被停用或出現問題時,PHP會自動把session id附著在URL中,這樣再透過session id就能跨頁使用session變數了。但這種附著也是有一定條件的,即「php.ini中的session.use_trans_sid = 1或編譯時開啟開啟了--enable-trans-sid選項」。
明白了以上的道理,現在我們來拋開cookie使用session,主要途徑有三條:
1、設定php.ini中的session.use_trans_sid = 1或編譯時打開了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
2、手動透過URL傳值、隱藏表單傳遞session id。
3、用檔案、資料庫等形式保存session_id,在跨頁過程中手動呼叫。
透過範例來說明:
s1.phps2.php
現在你手動關閉客戶端的cookie,再運行,可能得不到結果了吧。如果得不到結果,再“設定php.ini中的session.use_trans_sid = 1或編譯時開啟開啟了--enable-trans-sid選項”,又得到結果「中華人民共和國」33fb050a0fbecc2b8a8d57720189cc7b下一頁5db79b134e9f6b82c0b36e0489ee08ed " ;###### echo $url ; 』且############## ?> ###### ############ ####
e6c1fa2b05c45c2bec65921699c8d038
執行上述程式碼,在客戶端cookie正常的情況下,應該可以在取得結果「中華人民共和國」。
這也就是上面所說的途徑1。
下面再說途徑2:
修改的程式碼如下:
s1.phpd65af56e347652cd61a63e60243eb926下一頁5db79b134e9f6b82c0b36e0489ee08ed " ;
echo $url ; ?>
s2.php辦法3:
login.html會話ID ( $_GET [ ' s ' ]);
會話開始 ();
迴音 」 提交的會話變數1的值: 」 。 $_會話 [ ' 變數1 ' ];
?>
#
die ();
}
# ?>
#同樣請關閉cookie測試,使用者名稱:laogong 密碼:123 這是透過檔案儲存session id的,檔案是:e:/tmp/phpsid.txt,請依照自己的系統決定檔案名稱或路徑。
至於用資料庫的方法,我就不舉例子了,與文件的方法類似。
總結一下,上面的方法有一個共同點,就是在前一頁取得session id,然後想辦法傳到下一頁,在下一頁的session_start();程式碼之前加碼session_id(傳過來的session id);
推薦學習:《PHP影片教學》
以上是php 無法傳遞session怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!