首頁 >後端開發 >PHP問題 >php session無法傳值怎麼辦

php session無法傳值怎麼辦

藏色散人
藏色散人原創
2021-09-19 10:36:232814瀏覽

php session無法傳值的解決方法:1、查看伺服器的參數配置;2、在設定檔php.ini裡把「session.use_trans_sid」的值改成1;3、檢查下「var /tmp”資料夾是否可寫入並修改即可。

php session無法傳值怎麼辦

本文操作環境:Windows7系統、PHP7.1、Dell G3電腦。

php session無法傳值怎麼辦?

PHP session 失效不傳遞的解決方法

PHP中,session不能傳遞到下一個頁面去,一般有兩種情況:

我們先寫個php檔:, 傳到伺服器去看看伺服器的參數設定。

到session部分,看到session.use_trans_sid參數被設為零。

這 個參數指定了是否啟用透明SID支持,即session是否隨著URL傳遞。我個人的理解是,一旦這個參數被設為0,那麼每個URL都會啟動一個 session。這樣後面頁面就無法追蹤得到前面一個頁面的session,也就是我們所說的無法傳遞。兩個頁面在伺服器端產生了兩個session文 件,且無關聯。 (不知道這樣理解對不對?請高手指教。)

所以一個辦法是在設定檔php.ini裡把session.use_trans_sid的值改成1。

當然我們知道,不是誰都有權限去改php的設定的,那麼還有什麼間接的解決方法呢?

下面就用兩個實例來說明:

檔案1 test1.php

#

//表示是使用使用者ID為識別的session
session_id(SID);
//啟動session
session_start();

//將session的name賦值為Havi
$_SESSION['name']=”Havi”;
//輸出session,並設定超連結到第二頁test2.php
echo “ ”.$_SESSION['name'].””;
?>

文件2:test2.php

表示是使用使用者ID為識別的session
session_id(SID);
//啟動session
session_start();

//輸出test1.php中傳遞的session。
echo “This is “.$_SESSION['name'];
?>

每個頁面都要寫開啟session哦。 。不然還是不能正常工作

所以,重點是在session_start();前面加上session_id(SID);,這樣頁面轉換時,伺服器使用的是使用者儲存在伺服器session文件夾裡的session,解決了傳遞的問題。

不過有同鞋會反映說,這樣一來,多個用戶的session寫在一個SID裡了,那Session的價值就發揮不出來了。所以還有一招來解決此問題,不用加session_id(SID);前提是你對伺服器的php.ini有設定的權限:

output_buffering改成ON,道理就不表了。

第二個可能的原因是對伺服器保存session的資料夾沒有讀取的權限還是回到phpinfo.php中,查看session保存的位址:

session.save_path: var/tmp

所以就是檢查下var/tmp資料夾是否可寫入。

寫一個檔案:test3.php來測試一下:

echo var_dump(is_writeable(ini_get(“session.save_path”)));
?> ;

如果回傳bool(false),證明資料夾寫權限被限制了,那就換個資料夾咯,在你寫的網頁裡加入:

//設定目前目錄下session子資料夾為session儲存路徑。
$sessSavePath = dirname(__FILE__).'/session/';

//如果新路徑可讀可寫(可透過FTP上變更資料夾屬性為777實作),則讓該路徑生效。
if(is_writeable($sessSavePath) && is_readable($sessSavePath))
{session_save_path($sessSavePath);}

推薦學習:《PHP 影片教學

以上是php session無法傳值怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn