關於PHP編程中session的問題集錦及解決方(fāng)法
PHP的session功能,一直為許(xǔ)多的(de)初學者為(wéi)難。就連有些老手(shǒu),有時都被搞得莫名其妙。本文,將這些問題,做一個簡單(dān)的匯總,以便(biàn)大家查閱。
1、錯誤提示:
Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent |
分析(xī)及(jí)解(jiě)決辦法
這一類問題,的原(yuán)因是你在程序中使用(yòng)session_start()時,之前已經有實際的html內容輸出了。或許你說(shuō),我沒有啊,我隻不過是echo或print一條消息了。很抱歉,你的echo或print語句所產生的輸出,就是實際的html內容輸出。解決(jué)此類(lèi)問題的(de)辦法是,將你的(de)session_start()調到程序的第一行。
2、錯誤提示
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed |
分析及解決方(fāng)法:
出現(xiàn)這樣的(de)錯(cuò)誤語句一般是因為你的php.ini中關於session.save_path一項沒有設置好,解(jiě)決的方法是將(jiāng)session.save_path和session.cookie_path 設(shè)置置為
session_save_path = c:\temp session.cookie_path = \ |
然後在c:\目錄下建立一個temp目(mù)錄即可。
3、錯誤(wù)提示
Warning: Trying to destroy uninitialized session in |
分析及(jí)解決方法出類這樣的提示,一般情況都是你直接調session_destroy()函數造成的。很多的朋友認(rèn)為session_destroy()函數可(kě)以獨立的運行,其(qí)實不(bú)然。解決的方法是在(zài)你調session_destroy()函數之前,要(yào)用session_start()開啟session的功(gōng)能。
4、問題:怎(zěn)麽獲得當前session的id值呢?
最簡單的方法是(shì):
echo SID; |
5、問題:
我的程序,在調用header函數之前沒有任何的輸出,雖然我(wǒ)include了一個config.php文件,但在config.php文件中也沒有任何的輸出,為什麽session還是會報出與問題1同(tóng)樣的錯誤呢,是不是(shì)因為(wéi)我在header之前用了session_start()的緣故呢?
答:或(huò)許你確實認真的檢查了你的(de)php程序,在(zài)引用header()之(zhī)前確實也沒有任何的輸出(chū),並且在你的include文件中也沒(méi)有任何的輸出!但是你(nǐ)是否用光標鍵在?>這個PHP代碼結束語句後移動檢(jiǎn)查呢?那麽你(nǐ)會發現在?>這個後麵,有一個空(kōng)行(háng)或幾個空格,你刪除了這幾個空(kōng)行或(huò)空格,那麽問題就解決了。
注:此問題,會出PHP4.1.2中,更高版本,沒有(yǒu)測試過。
6、問:用session做登錄主頁麵後(hòu),其(qí)它頁麵怎麽用session限製登錄(lù)?
答:最簡單的方(fāng)法是
session_start(); if(!session_registered('login') ││ $login != true) { echo "你沒有(yǒu)登陸"; exit; } |
7、問:我用session_register()注冊了session變量,可是當我(wǒ)用header或用(yòng)javascript的重定(dìng)向語句,那麽在一下頁麵中,我卻訪問不到session所注冊的變量值。請問如何解決?
問題的程序片段(duàn):
<? session_start(); $ok = 'love you'; session_register('ok'); header("locations : next.php"); ?> |
next.php
<? session_start(); echo $ok; ?> |
解決的方法:
當你用header函數或window.locations這樣的功能後,你上(shàng)一個頁麵所注冊的session變量,就會容易的丟失,關(guān)於這個問題的原因(yīn),至今仍沒有一個(gè)詳細(xì)的回答。
不過有解決(jué)的方法。如下(xià)所示
header("locations: next.php" ."?" . SID); |
在(zài)跳轉到下一頁麵的時候,將session的當前id做為一個(gè)參數,傳到後(hòu)一個頁麵。
8、session如何傳數組
session_register('data'); $data=array(1,2,3,4); |
方法是先注冊後賦(fù)值
9、我是不是可以用(yòng)像(xiàng)$HTTP_GET_VARS['**']方(fāng)式來訪問session值呢(ne)?
回(huí)答:可以,你可以使用如下global數組來訪(fǎng)問session,以加強網頁的安全性
$HTTP_SESSION_VARS $_SESSION |
例(lì)程: