溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么解決php無法傳遞session問題

發(fā)布時間:2021-10-15 10:40:58 來源:億速云 閱讀:205 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“怎么解決php無法傳遞session問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么解決php無法傳遞session問題”吧!

php無法傳遞session的解決辦法:1、在客戶端中開啟cookie;2、檢查瀏覽器問題并實現(xiàn)存取cookie;3、開啟php.ini中的session.use_trans_sid即可。

怎么解決php無法傳遞session問題

本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦

PHP中SESSION不能跨頁傳遞問題的解決辦法

在PHP中使用過SESSION的朋友可能會碰到這么一個問題,SESSION變量不能跨頁傳遞。這令我苦惱了好些日子,最終通過查資料思考并解決了這個問題。我認(rèn)為,出現(xiàn)這個問題的原因有以下幾點:
1、客戶端禁用了cookie
2、瀏覽器出現(xiàn)問題,暫時無法存取cookie
3、php.ini中的session.use_trans_sid = 0或者編譯時沒有打開--enable-trans-sid選項

為什么會這樣呢?下面我解釋一下:

Session儲存于服務(wù)器端(默認(rèn)以文件方式存儲session),根據(jù)客戶端提供的session id來得到用戶的文件,取得變量的值,session id可以使用客戶端的Cookie或者Http1.1協(xié)議的Query_String(就是訪問的URL的“?”后面的部分)來傳送給服務(wù)器,然后服務(wù)器讀取Session的目錄。也就是說,session id是取得存儲在服務(wù)上的session變量的身份證。當(dāng)代碼session_start();運行的時候,就在服務(wù)器上產(chǎn)生了一個session文件,隨之也產(chǎn)生了與之唯一對應(yīng)的一個session id,定義session變量以一定形式存儲在剛才產(chǎn)生的session文件中。通過session id,可以取出定義的變量??珥摵螅瑸榱耸褂胹ession,你必須又執(zhí)行session_start();將又會產(chǎn)生一個session文件,與之對應(yīng)產(chǎn)生相應(yīng)的session id,用這個session id是取不出前面提到的第一個session文件中的變量的,因為這個session id不是打開它的“鑰匙”。如果在session_start();之前加代碼session_id($session id);將不產(chǎn)生新的session文件,直接讀取與這個id對應(yīng)的session文件。
PHP中的session在默認(rèn)情況下是使用客戶端的Cookie來保存session id的,所以當(dāng)客戶端的cookie出現(xiàn)問題的時候就會影響session了。必須注意的是:session不一定必須依賴cookie,這也是session相比cookie的高明之處。當(dāng)客戶端的Cookie被禁用或出現(xiàn)問題時,PHP會自動把session id附著在URL中,這樣再通過session id就能跨頁使用session變量了。但這種附著也是有一定條件的,即“php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項”。

明白了以上的道理,現(xiàn)在我們來拋開cookie使用session,主要途徑有三條:

1、設(shè)置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
2、手動通過URL傳值、隱藏表單傳遞session id。
3、用文件、數(shù)據(jù)庫等形式保存session_id,在跨頁過程中手動調(diào)用。

通過例子來說明吧:

s1.phps2.php

怎么解決php無法傳遞session問題<?   php
怎么解決php無法傳遞session問題   session_start   ();                      
怎么解決php無法傳遞session問題   $_SESSION   [   '   var1   '   ]   =   "   中華人民共和國   "   ;      
怎么解決php無法傳遞session問題   $url   =   "   <a href=   "   .   "   "s2.php">下一頁</a>   "   ;
怎么解決php無法傳遞session問題   echo       $url   ;                            
怎么解決php無法傳遞session問題   ?>



怎么解決php無法傳遞session問題<?   php
怎么解決php無法傳遞session問題   session_start   ();                                    
怎么解決php無法傳遞session問題   echo       "   傳遞的session變量var1的值為:   "   .   $_SESSION   [   '   var1   '   ];
怎么解決php無法傳遞session問題   ?>


運行以上代碼,在客戶端cookie正常的情況下,應(yīng)該可以在得到結(jié)果“中華人民共和國”。
現(xiàn)在你手動關(guān)閉客戶端的cookie,再運行,可能得不到結(jié)果了吧。如果得不到結(jié)果,再“設(shè)置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項”,又得到結(jié)果“中華人民共和國”

這也就是上面所說的途徑1。

下面再說途徑2:

修改的代碼如下:
s1.php

怎么解決php無法傳遞session問題<?   php
怎么解決php無法傳遞session問題   session_start   ();                                
怎么解決php無法傳遞session問題   $_SESSION   [   '   var1   '   ]   =   "   中華人民共和國   "   ;                
怎么解決php無法傳遞session問題   $sn       =       session_id   ();                              
怎么解決php無法傳遞session問題   $url   =   "   <a href=   "   .   "   "s2.php?s=   "   .   $sn   .   "   ">下一頁</a>   "   ;
怎么解決php無法傳遞session問題   echo       $url   ;                                      
怎么解決php無法傳遞session問題   ?>


s2.php辦法3:
login.html

怎么解決php無法傳遞session問題<?   php
怎么解決php無法傳遞session問題   session_id   (   $_GET   [   '   s   '   ]);                              
怎么解決php無法傳遞session問題   session_start   ();                                    
怎么解決php無法傳遞session問題   echo       "   傳遞的session變量var1的值為:   "   .   $_SESSION   [   '   var1   '   ];
怎么解決php無法傳遞session問題   ?>


怎么解決php無法傳遞session問題<!   DOCTYPE HTML   PUBLIC       "   -//W3C//DTD HTML 4.01 Transitional//EN   "   >
怎么解決php無法傳遞session問題   <   html   ><   head   >

<   title   >   Login   </   title   >                                                  
怎么解決php無法傳遞session問題   <   meta http   -   equiv   =   "   Content-Type   "    content   =   "   text/html; charset=GB2312   "   >  
怎么解決php無法傳遞session問題   </   head   >
怎么解決php無法傳遞session問題   <   body   >    請登錄:                                                
怎么解決php無法傳遞session問題   <   form name   =   "   login   "    method   =   "   post   "

action   =   "   mylogin1.php   "   >                                                
怎么解決php無法傳遞session問題用戶名   :<   input type   =   "   text   "    name   =   "   name   "   ><   br   >                              
怎么解決php無法傳遞session問題口 令   :<   input type   =   "   password   "    name   =   "   pass   "   ><   br   >                          
怎么解決php無法傳遞session問題   <   input type   =   "   submit   "    value   =   "   登錄   "   >                                      
怎么解決php無法傳遞session問題   </   form   >
怎么解決php無法傳遞session問題   </   body   >
怎么解決php無法傳遞session問題   </   html   >


mylogin1.php

<?   php

   $name   =   $_POST   [   '   name   '   ];
   $pass   =   $_POST   [   '   pass   '   ];
   if   (   !   $name       ||       !   $pass   ) {
   echo       "   用戶名或密碼為空,請<a href="login.html">重新登錄</a>   "   ;
   die   ();
}
   if    (   !   (   $name   ==   "   laogong   "       &&       $pass   ==   "   123   "   )) {
   echo       "   用戶名或密碼不正確,請<a href="login.html">重新登錄</a>   "   ;
   die   ();
}
   //   注冊用戶  
   ob_start   ();
   session_start   ();
   $_SESSION   [   '   user   '   ]   =       $name   ;
   $psid   =   session_id   ();
   $fp   =   fopen   (   "   e:/tmp/phpsid.txt   "   ,   "   w+   "   );
   fwrite   (   $fp   ,   $psid   );
   fclose   (   $fp   );
   //   身份驗證成功,進(jìn)行相關(guān)操作  
   echo       "   已登錄<br>   "   ;
   echo       "   <a href="mylogin2.php">下一頁</a>   "   ;

   ?>

mylogin2.php

怎么解決php無法傳遞session問題<?   php
怎么解決php無法傳遞session問題   $fp   =   fopen   (   "   e:/tmp/phpsid.txt   "   ,   "   r   "   );
怎么解決php無法傳遞session問題   $sid   =   fread   (   $fp   ,   1024   );
怎么解決php無法傳遞session問題   fclose   (   $fp   );
怎么解決php無法傳遞session問題   session_id   (   $sid   );
怎么解決php無法傳遞session問題   session_start   ();
怎么解決php無法傳遞session問題   if   (   isset   (   $_SESSION   [   '   user   '   ])   &&       $_SESSION   [   '   user   '   ]   =   "   laogong   "    ) {
怎么解決php無法傳遞session問題   echo       "   已登錄!   "   ;
怎么解決php無法傳遞session問題}
怎么解決php無法傳遞session問題   else    {
怎么解決php無法傳遞session問題   //   成功登錄進(jìn)行相關(guān)操作  
怎么解決php無法傳遞session問題   echo       "   未登錄,無權(quán)訪問   "   ;
怎么解決php無法傳遞session問題   echo       "   請<a href="login.html">登錄</a>后瀏覽   "   ;
怎么解決php無法傳遞session問題   die   ();
怎么解決php無法傳遞session問題}
怎么解決php無法傳遞session問題
怎么解決php無法傳遞session問題   ?>  
怎么解決php無法傳遞session問題  

同樣請關(guān)閉cookie測試,用戶名:laogong 密碼:123 這是通過文件保存session id的,文件是:e:/tmp/phpsid.txt,請根據(jù)自己的系統(tǒng)決定文件名或路徑。

至于用數(shù)據(jù)庫的方法,我就不舉例子了,與文件的方法類似。

總結(jié)一下,上面的方法有一個共同點,就是在前一頁取得session id,然后想辦法傳到下一頁,在下一頁的session_start();代碼之前加代碼session_id(傳過來的session id);

到此,相信大家對“怎么解決php無法傳遞session問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI