1. 程式人生 > >PHP session 失效不傳遞的解決辦法

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

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

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

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

這 個引數指定了是否啟用透明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);}

第一次些cms遇到這樣的問題,該文來自:http://blog.163.com/[email protected]/blog/static/111743825201072753634367/

相關推薦

PHP session 失效傳遞解決辦法

PHP中,session不能傳遞到下一個頁面去,一般有兩種情況: 我們先寫個php檔案:<?=phpinfo()?>, 傳到伺服器去看看伺服器的引數配置。 轉到session部分,看到session.use_trans_sid引數被設為了零。 這 個引數

laravel獲取session的三種解決辦法

問題:引用第三方類庫時,使用全域性函式session()可以儲存session,但是獲取不到 1、路由置於 web 中介軟體下,修改app/Http/Kernel.php檔案,如下 protected $middlewareGroups = [ //中介軟體web

php session跨頁面傳遞 session值丟失問題之完美解決

今天想用一個session來實現使用者登入判斷,也算是對之前session的探究,查了下資料session的執行機制如下:  session是伺服器端的一種會話機制,當客戶端的請求伺服器建立一個session時,伺服器會先檢測該請求裡面是否包含一個惟一的sessionID,如

在ios iPhone fixed 失效,固定在底部, 安卓可以 但是蘋果可以解決辦法

<divclass="main_comment">測試的文字~~~~~`</div> <divclass="commentBar">回覆框</div> ----------------------------------

maven項目打包的時候,*Mapper.xml 文件會打進去解決辦法

java cli 項目打包 per 不同 cto build direct ring 打包的時候,不同版本的 Eclipse 還有IDEA 會有打包打不進去Mapper.xml 文件,這個時候要加如下代碼, 在<build> 標簽內加入即可 <resou

MyEclipse 編譯解決辦法

解決 找不到類 htm 是我 http 引用 log ont eclipse 我遇到的情況是: 在controll中import自己寫的pojo類、service類,會飄紅。提示找不到類,即使我此時的引用寫的完全正確。 第六感告訴我,很可能是我的myeclipse沒有編譯。

PHP判斷是星期幾解決辦法

bstr case switch blog 星期幾 技術部 三種 ech utf-8 // 第一種寫法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期

supervisord stdout_logfile 生效解決辦法

文件 cto path stream app dir flow art pri 配置文件 [program:p2p_recv] command = /ebs_data/appenv3/bin/python xmpp_p2p_recv.pyc process_name =

vs警告 當前源代碼跟內置的版本一致解決辦法

.net sdn studio 代碼 style 不一致 post 內置 解決 本文轉載於:http://blog.csdn.net/bull521/article/details/51334464 vs警告 當前源代碼跟內置的版本不一致解決辦法 1.刪除掉 我的文檔/vi

win10的MySQL客戶端連接centos7虛擬機的mysql服務端連接解決辦法

png info entos 如果 sql image 技術 top 服務 分別在win10和Centos虛擬機上裝有MYSQL,但用電腦的mysql客戶端連接centos7的服務端報錯如下: 解決辦法: 如果可以從虛擬機連接到電腦的MYSQL服務端, 那就是Ce

bootstrap模態框hide遮罩層隱藏解決辦法

bootstrap modal 模態框 hide 問題:在使用ajax提交模態框表單數據後,隱藏模態框並局部刷新,導致遮罩層不消失 原因:模態框隱藏並局部刷新,導致在hide方法沒執行完成時已經局部刷新,沒有隱藏掉遮罩層 解決辦法:方法一:把模態框放在更上層頁面,而不是放在子頁面上 方法二:利

idea輸入法跟隨解決辦法

nbsp IT JD 最新 宋體 版本 windows8 ID font 最近使用idea開發項目,遇到輸入法不跟隨的問題,自己動手解決了下 idea輸入法不跟隨解決辦法:1):系統:windows10 版本:idea2017.2 解決辦法:使用QQ輸入法2):系統:

JQuery判斷radio屬性為空的時候錯誤提示信息顯示位置正確解決辦法

JQuery from表單驗證 radio input submit 只需要定義一個以下標簽即可以想讓錯誤信息顯示到哪裏就顯示到哪裏<label for="name" class="error"></label>說明:

cacti中個別流量圖超過80M顯示解決辦法

tool cti .html process -o alt tex bin 問題解決 修改前 #/usr/bin/rrdtool info /var/www/html/rra/_5328_traffic_in_792.rrd ds[traffic_in].min = 0.0

Github開啟亂掉,樣式載入出來,載入失敗,打解決辦法

修改 C:\Windows\System32\drivers\etc 中的hosts檔案將下面一段話新增到hosts檔案中: # GitHub Start 192.30.253.112 github.com 192.30.253.119 gist.github.com 15

iOS開發技巧之:Xcode8 NSLog列印json解決辦法

據說國外的大神是這麼解決的:   #ifdef DEBUG #define SLog(format, ...) printf("class: <%p %s:(%d) > method: %s \n%s\n", self, [[[NSString stringWith

樣本均衡解決辦法

正負樣本不均衡,正負是指的二分類麼? 正負樣本不均衡時,常用方法: 1.抽樣    過抽樣:將樣本量少的一類sample補齊    欠抽樣:將樣本量多的一類sample壓縮    組合抽樣:約定一個數量級N,同時進行過取

docker中的mysql資料庫連線解決辦法

1.在docker內部連線不上mysql資料庫 即在本地模式下不能連線 這時候應該是docker容器重啟過,mysql資料庫沒有啟動的原因,可以使用 service mysql restart 來啟動mysql資料庫 2.在宿主機上不能遠端連線到docker容器中的mysql資料

jdk解除安裝乾淨解決辦法

Win7系統下安裝jdk報錯;錯誤資訊:“ Windows Installer 程式包有問題。此安裝需要的DLL不能執行。請與您的支援人員或程式包開發商聯絡”。 造成該問題的原因是系統以前安裝過jdk,重新安裝需要徹底解除安裝舊的jdk,這樣重新安裝才能成功。 但是,開啟控制面板—

updatePanel 局部刷新JS執行解決辦法

後臺 ger lis .get media ups 通過 解決辦法 list 前臺 aspx <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <