綠色資源網(wǎng):您身邊最放心的安全下載(zǎi)站! 最新軟件|熱門排行|軟件分類|軟件專(zhuān)題|廠商大(dà)全(quán)

綠色(sè)資源網

技術教程
您的位置:首(shǒu)頁(yè)網絡編程PHP編程 → 關於PHP編程中session的問(wèn)題集錦及解決方(fāng)法(fǎ)

關於(yú)PHP編程中session的(de)問題集錦及解決方法

我要評論 2010/02/07 12:50:35 來源:綠色資源網 編輯:綠色(sè)資源站 [ ] 評論:0 點(diǎn)擊:373次

PHP的session功能,一直為(wéi)許多的初學者為(wéi)難。就連(lián)有些老手,有(yǒu)時都(dōu)被(bèi)搞(gǎo)得莫名(míng)其妙。本文,將這些問題,做(zuò)一個(gè)簡(jiǎn)單(dān)的匯總(zǒng),以便大(dà)家查閱(yuè)。

1、錯誤提示:

Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

分析及解決辦法(fǎ)

這(zhè)一類問(wèn)題(tí),的(de)原(yuán)因是你在程序(xù)中使用session_start()時,之前已經有實(shí)際的(de)html內(nèi)容(róng)輸出了(le)。或許你說,我沒有(yǒu)啊,我隻不過是(shì)echo或print一條消息了。很抱歉,你的(de)echo或print語句所產(chǎn)生的輸(shū)出,就是實際的html內容輸出。解決此類問題的辦法是,將你(nǐ)的session_start()調到程序的第一行。

2、錯(cuò)誤提示

Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed

分析及解決(jué)方法:

出現這樣的(de)錯誤語句一般是因為你(nǐ)的php.ini中關於session.save_path一(yī)項沒有(yǒu)設置好,解決的方法是(shì)將(jiāng)session.save_path和session.cookie_path 設置置為

session_save_path = c:\temp
session.cookie_path = \

然後在c:\目錄下(xià)建立(lì)一(yī)個temp目錄即可。

3、錯誤提示

Warning: Trying to destroy uninitialized session in

分析及解決方法出類這樣(yàng)的提示(shì),一(yī)般情況(kuàng)都是你直接調session_destroy()函數(shù)造成的。很多的(de)朋友認為session_destroy()函數可(kě)以獨立(lì)的運行,其實(shí)不(bú)然(rán)。解決的(de)方法(fǎ)是(shì)在你調session_destroy()函數之前,要(yào)用session_start()開(kāi)啟session的功能。

4、問題:怎麽獲得當前session的id值呢

最簡單的(de)方(fāng)法(fǎ)是:

echo SID;

5、問(wèn)題:

我的程序,在調用header函數之前沒(méi)有任(rèn)何的輸出(chū),雖(suī)然我(wǒ)include了一個config.php文件,但在config.php文件中也沒有任何的(de)輸出(chū),為什麽session還是會報出與問題1同樣的錯誤呢,是不是因為我在header之前用(yòng)了session_start()的緣(yuán)故呢?

答:或(huò)許你確實認(rèn)真的檢查了(le)你的php程序,在引用header()之前(qián)確實也沒有(yǒu)任何的輸出,並且在你的include文件中也沒有任何的輸出!但是你(nǐ)是(shì)否用光標鍵在?>這個PHP代(dài)碼結束語句(jù)後移動檢查呢?那麽你會發現在?>這個(gè)後麵(miàn),有一個空行或幾個空格,你(nǐ)刪除了這幾個空行或空格,那麽問題就解決了。

注(zhù):此問題,會出PHP4.1.2中,更高版本,沒有測試過。

6、問:用session做登錄主頁麵後,其它頁麵怎麽用session限製登(dēng)錄?

答:最簡單(dān)的方法是

session_start();
if(!session_registered('login') ││ $login != true)
{
echo "你(nǐ)沒有登陸";
exit;
}

7、問(wèn):我用(yòng)session_register()注冊了(le)session變量(liàng),可是當(dāng)我用header或(huò)用javascript的重定向語(yǔ)句,那麽在(zài)一下頁(yè)麵中,我卻訪問不到session所注冊的變量值(zhí)。請問如何解決?

問題的(de)程序片段:

<?
session_start();
$ok = 'love you';
session_register('ok');
header("locations : next.php");
?>

next.php

<?
session_start();
echo $ok;
?>

解(jiě)決的方法:

當你(nǐ)用header函數或window.locations這樣(yàng)的功能後,你上一個頁麵所(suǒ)注冊(cè)的session變量,就會容(róng)易的(de)丟失,關於這個問(wèn)題的原因,至今仍(réng)沒有一(yī)個詳(xiáng)細的回答。

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

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

在跳轉到下一頁麵的時候(hòu),將(jiāng)session的當(dāng)前(qián)id做為一個參數(shù),傳(chuán)到後一個(gè)頁麵。

8、session如(rú)何(hé)傳數組

session_register('data');
$data=array(1,2,3,4);

方法是先注冊後賦值

9、我是(shì)不是可(kě)以用像$HTTP_GET_VARS['**']方(fāng)式(shì)來訪問session值呢?

回答:可以,你可以使(shǐ)用如下global數組來訪(fǎng)問session,以加(jiā)強網頁的安全性

$HTTP_SESSION_VARS
$_SESSION

例程:

關鍵詞:PHP編程,session,解決方法

閱讀本文後您有什麽感想? 已有 人給(gěi)出評價!

  • 0 歡迎喜歡(huān)
  • 0 白癡
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙視