1. 程式人生 > >php5 的 session 詳解之二:有兩種方法傳遞 一個會話 ID:

php5 的 session 詳解之二:有兩種方法傳遞 一個會話 ID:

cookie
URL 引數
會話模組支援這兩種方法。cookie 更優化,但由於不總是可用,也提供替代的方法。第二種方法直接將會話 ID 嵌入到 URL 中間去。PHP 可以透明地轉換連線。除非是使用 PHP 4.2 或更低版本,需要手工在編譯PHP 時啟用。在 Unix 下,用 --enable-trans-sid 配置選項。如果此配置選項和執行時選項 session.use_trans_sid 都被啟用(修改 php.ini),相對 URI 將被自動修改為包含會話 ID。
● session_id
session_id() 用於設定或取得當前session_id 。php5中既可以使用session_id(),也可以通過附加在url上的SID取得當前會話的session_id和session_name。如果session_id()有具體指定值的話,將取代當前的 session_id 值。使用該函式前必須啟動會話:session_start();當我們使用session cookies時,如果指定了一個 session_id()值,每次啟動 session_start()都會往客戶端傳送一個 cookie 值。不論當前 session_id是否與指定值相等。session_id()如果沒有指定值,則返回當前 session_id();當前會話沒有啟動的話,則返回空字串。
● 檢查 session 是否存在?
在以往的 php 版本中通常使用 session_is_register()檢查 session 是否存在 , 如 果 您 使 用 $_SESSION[ ‘ XXX ’ ]=XXX 來 注 冊 會 話 變 量 , 則session_is_register()函式不再起作用。你可以使用isset($_SESSION[‘xxx’])來替代。
● 更改 session_id
session_regenerate_id() 更改成功則返回 true,失敗則返回 false。使用該函式可以為當前 session 更改 session_id,但不改變當前 session 的其他資訊。例如:
<?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "原始 SessionID: $old_sessionid<br />";
echo "新的 SessionID: $new_sessionid<br />";
echo"<pre>";
print_r($_SESSION);
echo"</pre>";
?>
● session_name() 返回當前 session 的 name 或改變當前 session 的 name。如果要改變當前 session 的 name,必須在 session_start() 之前呼叫該函式。注意:session_name 不能只由數字組成,它至少包含一個字母。否則會在每時每刻都生成一個新的 session id.session 改名示例:
<?php
$previous_name = session_name("WebsiteID");echo "新的 session 名為: $previous_name<br />";
?>
● 如何刪除 session?
1、unset ($_SESSION['xxx'])刪除單個session,unset($_SESSION['xxx']) 用來unregister一個已註冊的session變數。其作用和session_unregister()相同。session_unregister()在PHP5中不再使用,可將之打入冷宮。unset($_SESSION)此函數千萬不可使用,它會將全域性變數$_SESSION銷燬,而且還沒有可行的辦法將其恢復.使用者也不再可以註冊$_SESSION 變數。
2、$_SESSION=array()刪除多個 session

3、session_destroy()結束當前的會話,並清空會話中的所有資源。該函式不會unset(釋放)和當前session相關的全域性變數(globalvariables),也不會刪除客戶端的session cookie.PHP 預設的session是基於cookie的,如果要刪除cookie的話,必須藉助setcookie()函式。

返回值:布林值。

功能說明:這個函式結束當前的 session,此函式沒有引數,且返回值均為true
session_unset() 如果使用了$_SESSION,則該函式不再起作用。由於PHP5必定要使用$_SESSION,所以此函式可以打入冷宮了。
下面是 PHP 官方關於刪除 session 的案例:
<?php
// 初始化 session.
session_start();
/*** 刪除所 有的 session 變數 ..也可用 unset($_SESSION[xxx])逐個刪 除。
****/
$_SESSION = array();
/***刪除 sessin id.由於 session 預設是基於 cookie 的,所以使用 setcookie刪除包含 session id 的 cookie.***/
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 最後徹底銷燬 session.
session_destroy();
?>
由此我們可以得出刪除 Session 的步驟:
1session_start()
2$_SESSION=array()/unset($_SESSION['xxx'])
3session_destroy()