當前位置:編程學習大全網 - 腳本源碼 - php的session出錯問題

php的session出錯問題

session問題集錦  對於PHP的session功能,始終找不到合適的答案,尤其是壹些錯誤,還有壹些沒有錯誤的結果,最可怕的就是後者,壹直為許多的初學者為難。就連有些老手,有時都被搞得莫名其妙。本文,將這些問題,做壹個簡單的匯總,以便大家查閱。 1.

錯誤提示

Warning: Cannot send session cookie - headers already sent

Warning: Cannot send session cache limiter - headers already sent

分析及解決辦法

這壹類問題,的原因是妳在程序中使用session_start()時,之前已經有實際的html內容輸出了。或許妳說,我沒有啊,我只不過是echo或print壹條消息了。很抱歉,妳的echo或print語句所產生的輸出,就是實際的html內容輸出。解決此類問題的辦法是,將妳的session_start()調到程序的第壹行。 2.

錯誤提示

Warning: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed

分析及解決方法

出現這樣的錯誤語句壹般是因為妳的php.ini中關於session.save_path壹項沒有設置好,解決的方法是將session.save_path和session.cookie_path 設置置為

session_save_path = c: emp

session.cookie_path = c: emp

然後在c:目錄下建立壹個temp目錄,即可 3.

錯誤提示

Warning: Trying to destroy uninitialized session in

分析及解決方法

出類這樣的提示,壹般情況都是妳直接調session_destroy()函數造成的。很多的朋友認為session_destroy()函數可以獨立的運行,其實不然。解決的方法是在妳調session_destroy()函數之前,要用session_start()開啟session的功能。 4.問題:怎麽獲得當前session的id值呢?

最簡單的方法是:

echo SID;

妳會發現的。 5.問題:我的程序,在調用header函數之前沒有任何的輸出,雖然我include了壹個config.php文件,但在config.php文件中也沒有任何的輸出,為什麽session還是會報出與問題1同樣的錯誤呢,是不是因為我在header之前用了session_start()的緣故呢?

答:或許妳確實認真的檢查了妳的php程序,在引用header()之前確實也沒有任何的輸出,並且在妳的include文件中也沒有任何的輸出!但是妳是否用光標鍵在?>這個PHP代碼結束語句後移動檢查呢?那麽妳會發現在?>這個後面,有壹個空行或幾個空格,妳刪除了這幾個空行或空格,那麽問題就解決了。

註:此問題,會出PHP4.1.2中,更高版本,沒有測試過。 6.問:用session做登錄主頁面後,其它頁面怎麽用session限制登錄。。。

答:最簡單的方法是

session_start();

if(!session_registered('login') ││ $login != true) {

echo "妳沒有登陸";

exit;

} 7.問:我用session_register()註冊了session變量,可是當我用header或用javascript的重定向語句,那麽在壹下頁面中,我卻訪問不到session所註冊的變量值。請問如何解決?

問題的程序片段:

session_start();

$ok = 'love you';

session_register('ok');

header("location : next.php");

> next.php

session_start();

echo $ok;

> 解決的方法:

當妳用header函數或window.location這樣的功能後,妳上壹個頁面所註冊的session變量,就會容易的丟失,關於這個問題的原因,至今仍沒有壹個詳細的回答。

不過有解決的方法。如下所示

header("Location: next.php" ."?" . SID);

在跳轉到下壹頁面的時候,將session的當前id做為壹個參數,傳到後壹個頁面。 8.session如何傳數組

session_register('data');

$data=array(1,2,3,4); 方法是先註冊後賦值 9.問題9:我是不是可以用像$HTTP_GET_VARS['**']方式來訪問session值呢? 回答:可以,妳可以使用如下global數組來訪問session,以加強網頁的安全性

$HTTP_SESSION_VARS

$_SESSION

例程:

session_start();

$username = 'stangly.wrong';

session_register('username'); echo $HTTP_SESSION_VARS['username'];

echo '

';

echo $_SESSION['username'];

>

請參照此例程修改符合您自己的程序。 問題10:session_unregister() 和 session_destroy() 有何區別?

session_unregister()函數主要作用是註消當前的壹sion.(譯自於php.net) 例程:

if(isset($_COOKIE[session_name()])) {

session_start();

session_destroy();

unset($_COOKIE[session_name()]);

}

以上,所述是壹些新手經常遇到的問題。或許是詳述不清,難免有誤所在,請高手指點批評。

php中的session的配置今天調試程序遇到了session的設置問題,網上這篇文章比較好,***拿來學習,並供大家參考。

轉載自旅行論壇 piling with --enable-trans-sid.

session.use_trans_sid = 1 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" ======================================================================

session 的生命周期是多長 1 瀏覽器結束時其生命周期也同時結束,但是檔案仍然存在於 /tmp/(sess_)

2 下次重新開瀏覽器時會重新分配 sessionID,如果妳使用 session_id() 把以前的 ID 帶回來,

則會去讀取殘存在 /tmp 處的 sess_, 取回妳之前所有已經設定的參數

3 可以在 php.ini 裏修改 session 檔案殘存的時間 session.gc_maxlifetime = 1440 ; after this number of seconds, stored

; data will be seen as 'garbage' and

; cleaned up by the gc process 默認是 1440 秒,24分鐘

=========================================================================使用無限生命期Session的方法

在PHP4.0中加入了對Session的支持,方便了我們很多程序,比如購物車等等!

在很多論壇中,Session也用於處理用戶的登陸,記錄下用戶名和密碼,使得用戶不必每次都輸入自己的用戶名和密碼!但是壹般的Session的生命期有限,如果用戶關閉了瀏覽器,就不能保存Session的變量了!那麽怎麽樣可以實現Session的永久生命期呢?

大家知道,Session儲存在服務器端,根據客戶端提供的SessionID來得到這個用戶的文件,然後讀取文件,取得變量的值,SessionID可以使用客戶端的Cookie或者Http1.1協議的Query_String(就是訪問的URL的“?”後面的部分)來傳送給服務器,然後服務器讀取Session的目錄……

要實現Session的永久生命期,首先需要了解壹下php.ini關於Session的相關設置(打開php.ini文件,在“[Session]”部分):

1、session.use_cookies:默認的值是“1”,代表SessionID使用Cookie來傳遞,反之就是使用Query_String來傳遞;

2、session.name:這個就是SessionID儲存的變量名稱,可能是Cookie,也可能是Query_String來傳遞,默認值“PHPSESSID”;

3、session.cookie_lifetime:這個代表SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器壹關閉SessionID就作廢……就是因為這個所以Session不能永久使用!

4、session.gc_maxlifetime:這個是Session數據在服務器端儲存的時間,如果超過這個時間,那麽Session數據就自動刪除!

還有很多的設置,不過和本文相關的就是這些了,下面開始講使用永久Session的原理和步驟。

前面說過,服務器通過SessionID來讀取Session的數據,但是壹般瀏覽器傳送的SessionID在瀏覽器關閉後就沒有了,那麽我們只需要人為的設置SessionID並且保存下來,不就可以……

如果妳擁有服務器的操作權限,那麽設置這個非常非常的簡單,只是需要進行如下的步驟:

1、把“session.use_cookies”設置為1,打開Cookie儲存SessionID,不過默認就是1,壹般不用修改;

2、把“session.cookie_lifetime”改為正無窮(當然沒有正無窮的參數,不過999999999和正無窮也沒有什麽區別);

3、把“session.gc_maxlifetime”設置為和“session.cookie_lifetime”壹樣的時間;

設置完畢後,打開編輯器,輸入如下的代碼:

------------------------------------------------------------------------------------ <?php session_start();

session_register('count');

$count++;

echo $count;

>

------------------------------------------------------------------------------------

然後保存為“session_check.php”,用瀏覽器打開“session_check.php”,看看顯示的是不是“1”,再關閉瀏覽器,然後再打開瀏覽器訪問“session_check.php”,如果顯示“2”,那麽恭喜了,妳已經成功;如果失敗的話,請檢查妳前面的設置。

但是如果妳沒有服務器的操作權限,那就比較麻煩了,妳需要通過PHP程序改寫SessionID來實現永久的Session數據保存。查查php.net的函數手冊,可以見到有“session_id”這個函數:如果沒有設置參數,那麽將返回當前的SessionID,如果設置了參數,就會將當前的SessionID設置為給出的值……

只要利用永久性的Cookie加上“session_id”函數,就可以實現永久Session數據保存了!

但是為了方便,我們需要知道服務器設置的“session.name”,但是壹般用戶都沒有權限查看服務器的php.ini設置,不過PHP提供了壹個非常好的函數“phpinfo”,利用這個可以查看幾乎所有的PHP信息!

------------------------------------------------------------------------------------

------------------------------------------------------------------------------------

打開編輯器,輸入上面的代碼,然後在瀏覽器中運行這個程序,會見到PHP的相關信息(如圖1所示)。其中有壹項“session.name”的參數(圖中已經標出),這個就是我們需要的服務器“session.name”,壹般是“PHPSESSID”。

記下了SessionID的名稱後,我們就可以實現永久的Session數據儲存了!

打開編輯器,輸入下面的代碼:

------------------------------------------------------------------------------------

session_start(); // 啟動Session

session_register('count'); // 註冊Session變量Count

if(isset($PHPSESSID)) {

session_id($PHPSESSID);

} // 如果設置了$PHPSESSID,就將SessionID賦值為$PHPSESSID,否則生成SessionID

$PHPSESSID = session_id(); // 取得當前的SessionID

$count++; // 變量count加1

setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 儲存SessionID到Cookie中

echo $count; // 顯示Session變量count的值

>

------------------------------------------------------------------------------------ 保存之後,利用和剛才擁有服務器權限時候的檢測壹樣的方法,檢測是否成功的保存了SessionID。

後記:

其實真正的永久儲存是不可能的,因為Cookie的保存時間有限,而服務器的空間也有限……

但是對於壹些需要保存時間比較長的站點,以上方法就已經足夠了!關於Session的其他應用,可

以參見zphp.com的文章。

最後,筆者的調試環境:Windows98DigExt(SE)+Apache+PHP 4.04。 本文來自CSDN博客,轉載請標明出處: /yuyuzhou06/archive/2007/11/27/1905017.aspx

  • 上一篇:蔚少輝的簡歷
  • 下一篇:外貿建站的框架有哪幾種
  • copyright 2024編程學習大全網