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

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

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)與策劃設(shè)計(jì),單縣網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:單縣等地區(qū)。單縣做網(wǎng)站價(jià)格咨詢:18982081108

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

為什么會(huì)這樣呢?下面我解釋一下:

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();運(yùn)行的時(shí)候,就在服務(wù)器上產(chǎn)生了一個(gè)session文件,隨之也產(chǎn)生了與之唯一對應(yīng)的一個(gè)session id,定義session變量以一定形式存儲在剛才產(chǎn)生的session文件中。通過session id,可以取出定義的變量。跨頁后,為了使用session,你必須又執(zhí)行session_start();將又會(huì)產(chǎn)生一個(gè)session文件,與之對應(yīng)產(chǎn)生相應(yīng)的session id,用這個(gè)session id是取不出前面提到的第一個(gè)session文件中的變量的,因?yàn)檫@個(gè)session id不是打開它的“鑰匙”。如果在session_start();之前加代碼session_id($session id);將不產(chǎn)生新的session文件,直接讀取與這個(gè)id對應(yīng)的session文件。
PHP中的session在默認(rèn)情況下是使用客戶端的Cookie來保存session id的,所以當(dāng)客戶端的cookie出現(xiàn)問題的時(shí)候就會(huì)影響session了。必須注意的是:session不一定必須依賴cookie,這也是session相比cookie的高明之處。當(dāng)客戶端的Cookie被禁用或出現(xiàn)問題時(shí),PHP會(huì)自動(dòng)把session id附著在URL中,這樣再通過session id就能跨頁使用session變量了。但這種附著也是有一定條件的,即“php.ini中的session.use_trans_sid = 1或者編譯時(shí)打開打開了--enable-trans-sid選項(xiàng)”。

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

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

運(yùn)行以上代碼,在客戶端cookie正常的情況下,應(yīng)該可以在得到結(jié)果“中華人民共和國”。
現(xiàn)在你手動(dòng)關(guān)閉客戶端的cookie,再運(yùn)行,可能得不到結(jié)果了吧。如果得不到結(jié)果,再“設(shè)置php.ini中的session.use_trans_sid = 1或者編譯時(shí)打開打開了--enable-trans-sid選項(xiàng)”,又得到結(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   );
   //   身份驗(yàn)證成功,進(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é)一下,上面的方法有一個(gè)共同點(diǎn),就是在前一頁取得session id,然后想辦法傳到下一頁,在下一頁的session_start();代碼之前加代碼session_id(傳過來的session id);

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

當(dāng)前標(biāo)題:怎么解決php無法傳遞session問題
分享鏈接:http://bm7419.com/article44/isgehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、做網(wǎng)站、ChatGPT、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)