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

2020-07-16 10:06:19

PHP session失效不傳遞的解決辦法:首先寫個php檔案內容為「<?=phpinfo()?>」;然後傳到伺服器去看伺服器的引數設定,表明使用者ID為標識的session;最後將session的name賦值Havi,輸出session。

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

我們先寫個php檔案:<?=phpinfo()?>,傳到伺服器去看看伺服器的引數設定。

轉到session部分,看到session.use_trans_sid引數被設為了0。

這 個引數指定了是否啟用透明SID支援,即session是否隨著URL傳遞。我個人的理解是,一旦這個引數被設為0,那麼每個URL都會啟一個 session。這樣後面頁面就無法追蹤得到前面一個頁面的session,也就是我們所說的無法傳遞。兩個頁面在伺服器端生成了兩個session文 件,且無關聯。

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

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

下面就用兩個範例來說明吧:

檔案1 test1.php

<?php
//表明是使用使用者ID為標識的session
session_id(SID);
//啟動session
session_start();
//將session的name賦值為Havi
$_SESSION['name']=」Havi」;
//輸出session,並設定超連結到第二頁test2.php
echo 「<a href=」test2.php」>」.$_SESSION['name'].」</a>」;
?>

檔案2: test2.php

<?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 session失效不傳遞的解決辦法的詳細內容,更多請關注TW511.COM其它相關文章!