close

轉錄自 http://km.tceb.edu.tw/~wsx/php/ch7-2.htm


 

session 函式

 


 
當PHP在使用Session的功能之前,由於 php.ini 的一些設定值會影響session函數的使用,所以應先了解 有關session在php.ini 的有關設定:

參數名稱
預設值
說明
參數可變更性
session.save_path
/tmp
session檔案存放路徑 可任意修改
session.name
PHPSESSID
session 的名稱(類似cookie的變數名稱) 可任意修改
session.save_handler
files
處理session存取的模式(預設:檔案) 可任意修改
session.auto_start
0
自動啟動(預設:關) 可任意修改
session.gc_probability
1

「垃圾收集」(garbage collection,資源回收筒)的處理機率

可任意修改
session.gc_maxlifetime
1440
「垃圾收集」(garbage collection,資源回收筒)被處理前的存活週期(預設:1440「秒」) 可任意修改
session.serialize_handler
php
處理連續資料方式的模式,本功能只有 WDDX 模組或 PHP 內部使用。內定值為 php。 可任意修改
session.cookie_lifetime
0
session使用cookie的存活週期;以「秒」為單位(預設:隨瀏覽器關閉即消失) 可任意修改
session.cookie_path
/
session使用cookie的路徑(預設:與domain相同或根路徑) 可任意修改
session.cookie_domain
session使用cookie的網域名稱 可任意修改
session.cookie_secure
session使用cookie的安全性 可任意修改
session.use_cookies
1
session使用cookie的功能(預設:啟用) 可任意修改
session.use_only_cookies
0
僅使用cookie方式來傳遞session,不可利用URLs方式(預設:關) 可任意修改
session.referer_check
 
session在重新整理時檢查session是否還存在 可任意修改
session.entropy_file
 
特別設定 session 值的檔案 可任意修改
session.entropy_length
0
特別設定 session 值的長度(預設:關) 可任意修改
session.cache_limiter
nocache
使用cache限制器(預設:不用要cache) 可任意修改
session.cache_expire
180
使用cache存活時間 可任意修改
session.use_trans_sid
0
使用sid值(session id)傳送模式(基於安全,預設:關閉) 須在php.ini
或ttp.conf修改
url_rewriter.tags
a=href,
area=href,
frame=src,
input=src,
form=fakeentry
網址(url)重新導向的標籤(tag) 可任意修改

 如果要改變這些設定,可直接修改 php.ini 再重新啟動 Web Server,也可以利用 ini_set( )函數來設定,設定方式如下:

ini_set ("參數名稱", "新的參數值");
 

 使用Session時,不外乎三個程序:

第一:啟動session功能 ─ 使用 session_start( ) 函數

第二:註冊session變數 ─ 使用 session_register( ) 函數
    (或用$_SESSION、$HTTP_SESSION_VARS )

第三:清除session變數或檔案 ─ 使用 session_unregister( ) session_destroy( )函數

 當然,如果想知道session的狀況,例如:

取得 session 的id值(與session檔案名稱,就是sess_後面接的32字元) ─ 使用 session_id ( )函數

查看要傳遞的變數是否已被註冊 ─ 使用 session_is_registerd( ) 函數

 接下來,先介紹session各函數的語法,再用範例的方式來綜合介紹如何使用session:

   
 
session_start函數
語法
session_start( )
說明

建立一個session或在已啟動session的狀況下,繼續目前session id的「傳值」狀態,這類似GET、POST或cookie一樣。

注意:

  1. 如果使用的狀態是屬於cookie base的session傳遞方式,之後程式的開頭都必須使用
    session_start( )函數。
  2. 另外,在使用session_start( )函數時,在session_start( )之前都不可以有任何的結果輸出,例如不可以在session_start( )之前使用echo 輸出變數或將session_start( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。
傳回值
true
範例
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<?php
session_start(); //啟動 session
echo '>>第一頁<<';

$_SESSION['color'] = '藍色';
$_SESSION['city'] = '台中市';
$_SESSION['time'] = date("Y年m月d日 H時i分s秒");

// 這是連結到另一個php程式,
// 如果可以使用 cookie方式,
//則利用以下方式連結到「第二頁」的程式

//注意這裡用單引號
echo '<br /><a href="ch7-2-1a.php">第二頁(cookie)</a>';

// 如果需用,利用長的session id值的url方式傳遞
echo '<br /><a href="ch7-2-1a.php?'.SID. '">第二頁(URLs)</a>';

?>

ch7-2-1.php

執行結果>>

第02行:啟動 session,此時PHP會將session id暫在到一個變數名稱「PHPSESSID」及session id 值存在cookie裡;同時建立一個session檔案。

第05、06、07行:利用$_SESSION變數「color」及記錄到session檔案裡。
第14行:如果php.ini有將「session.use_trans_sid」設定為「1」,則可正常傳值到第二頁 ;網址會自動加上(舉例)「?PHPSESSID=8234c3f661bd1eac450c23d5650e0881」。

第17行:如果php.ini將「session.use_trans_sid」設定為「0」(預設值),則需要利用URLs方式傳遞 session,「SID」是PHP在啟動session後自動產生的變數名稱,例如「PHPSESSID=8234c3f661bd1eac450c23d5650e0881」,所以超連結的網址會變為:
ch7-2-1a.php?PHPSESSID=8234c3f661bd1eac450c23d5650e0881」。

 
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
<?php
session_start();

echo '>>第二頁<< <br />';
echo $_SESSION['color']."<br>";
echo $_SESSION['city']."<br>";
echo date("Y年m月d日 H時i分s秒")." ==> ".$_SESSION['time'];

// 如果需用,利用長session id的方式傳遞回第一頁
echo '<br /><a href="ch7-2-1.php?'. SID . '">第一頁</a>';
?>

ch7-2-1a.php

第02行:傳遞過來的第二頁,也要先啟動session

第05、06、07行:直接輸出結果;如果沒有輸出結果,則應該是php.ini 「session.use_trans_sid」設定為「0」,無法傳遞session id給第二頁程式找到session的檔案。
 
   
 
session_register 函數
語法
session_register( mixed name [, mixed ...])
說明

註冊新的變數到session檔裡。

注意:

  1. 如果session_register( )沒有作用或系統提出警告,可能是php.ini的「register_globals = Off」
  2. register_globals: 注意: 自 PHP 4.2.0 版起,register_globals的指令已預設為 off。PHP 社群鼓勵所有使用者不要依賴此指令,轉而使用其他方法,如 superglobals(將在範例中示範)。
傳回值
bool
範例
01:
02:
03:
04:
05:
06:
07:
08:
09:
<?php
$abc = "最原始的方法";
session_register("abc");

$_SESSION["xyz"] = "第二種方法";

$HTTP_SESSION_VARS["third"] = "第三種方法";

?>
 

第03行:註冊session的變數名稱 abc,並將值置入。注意,在session_register( ) 函數內,註冊的是名稱的「字串」,不用加「$」。

第05行:這是利用所謂superblobals方式註冊變數名稱「 xyz 」及值。
第14行:這是利用所謂superblobals方式註冊變數名稱「 third 」及值。

此外,請特別注意:如果在session_register( )函數前沒有使用 session_start( )來啟動時,會自動呼叫 session_start( );而 $_SESSION 及 $HTTP_SESSION_VARS 方式並不會呼叫 ,須在使用前事先 session_start( ) 才有作用。

 
   
 
session_unregister 函數
語法
session_unregister ( string name)
說明

刪除session的變數。

注意:須先啟動session_start( )函數才可正常清除。

傳回值
bool,如果清除成功,將回傳TRUE。
範例
01:
02:
03:
04:
05:
<?php
session_start( );

session_unregister("abc"); //假設 $abc = "123"
?>
 
 
   
 
session_destroy 函數
語法
session_destroy ( )
說明

結束session,並將儲存session的檔案刪除。

注意:須先啟動session_start( )函數才可正常運作。

傳回值
bool,如果清除成功,將回傳TRUE;否則傳回 FALSE。
範例
01:
02:
03:
04:
05:
06:
07:
<?php
session_start( );

session_unset( );

session_destroy( );
?>
 
第02行:啟動session
第04行:清除session檔裡所有的資料; 如果要使用session_destroy( )函數,這動作可有可無。
第06行:刪除session檔
   
  session 函式
 
session_cache_expire 傳回目前cache存活時間Return current cache expire
session_cache_limiter 取得或設計目前cache的限制器
session_decode 從某一字串中進行session資料的解碼
session_destroy 終結一個session的所有資料
session_encode 把session資料的字串進行編碼
session_get_cookie_params 取得session在cookie的參數
session_id 取得或設定目前的 session id
session_is_registered 找出在session中已註冊的全域變數
session_module_name 取得或設定目前session的組態
session_name 取得或設定目前session的名稱(預設是PHPSESSID)
session_regenerate_id Update the current session id with a newly generated one
session_register 註冊一個或數個全域變數到目前的session裡
session_save_path 取得或設定目前session檔案的儲存路徑
session_set_cookie_params 設定session在cookie的參數
session_set_save_handler 設定使用者層次的session儲存功能
session_start 啟動session
session_unregister 註消目前在session裡的變數名稱
session_unset 釋放所有在session裡的資料
session_write_close 寫入session資料並結束session功能
   

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 James Wu 的頭像
    James Wu

    James's Privacy Corner

    James Wu 發表在 痞客邦 留言(0) 人氣()