php使用Cookie實現和使用者會話的方法,phpcookie實現會話
本文執行個體講述了php使用Cookie實現和使用者會話的方法。分享給大家供大家參考。具體分析如下:
PHP 包含了很多的函數,可以用來管理和記錄使用者資訊,包括簡單的 cookie 和全方位的使用者會話。會話使用 PHP 語言內建的技術,使得儲存狀態就像是引用超全域變數那樣簡單。
1.Cookie 簡介
我們可以和 PHP 指令碼一起使用 cookie 來儲存一些關於使用者的較小的資訊。 Cookie 是由使用者瀏覽器儲存的少量資料,它和一個來自伺服器或指令碼的請求一致。通過一個使用者的瀏覽器,一個單個的主機可以請求儲存 20 個 cookie 。每個 cookie 包含一個名字、值和到期日期,以及主機和路徑資訊。一個單個的 cookie 的大小限制是 4KB 。
在設定了 cookie 之後,只有發出請求的主機能夠讀取資料,這就保證了使用者隱私得到尊重。另外,使用者可以配置自己的瀏覽器通過他接受或是拒絕所有 cookie 的請求。因此, cookie 應該適度地使用,並且在沒有設計實現警告使用者的一個環境中,不應該作為一個基本元素而依賴。
如果 網頁瀏覽器配置為儲存 cookie ,它將保持基於 cookie 的資訊直到到期日期。如果使用者使用瀏覽器瀏覽符合 cookie 的路徑和域的任何頁面,它將會把 cookie 重新發送給伺服器。隨後,一個 PHP 指令碼能夠訪問 cookie , cookie 在環境變數 HTTP_COOKIE 中或者作為 $COOKIE 超全域變數的一部分,我們可以用 3 種方式來訪問它們:
複製代碼 代碼如下:echo $_SERVER["HTTP_COOKIE"];
echo getenv("HTTP_COOKIE");
echo $_COOKIE["vegetable"];
2.使用 PHP 設定一個 cookie
我們可以用兩種方法在一個 PHP 指令碼中設定一個 cookie 。首先,用 header() 函數來設定 SetCookie 標題。 Header() 函數需要一個字串,該字串隨後將包含到伺服器響應的標題部分。由於標題會為你自動發送, header() 必須在發送給瀏覽器的熱河輸出之前調用。
複製代碼 代碼如下:head("Set Cookie:vegetable=artichoke; expires=Tue,07-Mar-06 14:39:58 GMT;path=/;domain=yourmain.com");
儘管沒什麼困難,這種設定 cookie 的方法還是需要我們編寫一個函數來構建標題字串。像這個例子那樣格式化日期並對名 / 值對進行 URL 編碼並不是特別艱難的任務,但它還是一項重複性的工作,因為 PHP 提供了一個函數來做到這些,這就是 setcookie() 。
Setcookie() 函數所做的事情就像它的名字所顯示的那樣,它輸出一個 Set-Cookie 標題。因此,它應該在任何其他內容發送給瀏覽器之前調用。這個函數接受 cookie 名字、 cookie 值、 UNIX 時間戳記格式的到期日期、路徑、域,以及一個整數,如果 cookie 僅通過一個安全的串連發送的話,這個整數的值設定為 1. 除了第一個參數以外,這個函數的所有參數都是可選的。
複製代碼 代碼如下:<?php
setcookie ( "vegetable" , "artichoke" , time ()+3600, "/" , ".yourdomain.com" , 0);
if ( isset ( $_COOKIE [ "vegetable" ])){
echo "
Hello again, you have chosen: " . $_COOKIE [ "vegetable" ]. ".
" ;
}
else {
echo "
Hello you. This may be your first visit.
" ;
}
?>
即便我們在指令碼第一次啟動並執行時候設定 cookie , $_COOKIE["vegetable"] 變數也不會在這時候建立。由於只有當瀏覽器將一個 cookie 發送到伺服器的時候,才會讀取它,因此,直到使用者重新訪問這個域內的一個頁面的時候,我們才能夠讀取它。
正式地講,要刪除一個 cookie ,只需要調用帶有 cookie 名字參數的 setcookies():
setcookie("vegetable");
然而,這種方法並不總是奏效,並且不能依賴這種方法。相反,要刪除一個 cookie ,使用一個確定已經到期的時間來設定 cookie ,這種方法是最安全的:
Setcookie("vegetable", "", time()-60, "/", "yourdomain.com", 0);
還要確保傳遞給 setcookie() 與最初設定 cookie 時候所使用的是相同的路徑、域和安全參數。
3.會話函數概覽
當一個訪客訪問一個支援會話的頁面,要麼分配一個新的標識符,要麼這個使用者和之前的訪問已經建立的一個標識符重新關聯。任何已經和會話相關聯的變數,都通過 $_SESSION 超全域變數可供你的代碼使用。
工作階段狀態通常儲存在一個臨時檔案中,儘管你可以使用一個名為 session_set_save_handler() 的函數實現資料庫儲存。
4.開始一個會話
複製代碼 代碼如下:<?php
session_start ();
echo "
Your session ID is " . session_id (). "
" ;
?>
5.使用會話變數
在每一個 PHP 文檔中訪問一個唯一的工作階段識別項只是會話功能的開始。當一個會話啟動後,我們可以在超全域變數 $_SESSION 中儲存任意多個變數,然後在任何支援會話的頁面上訪問它們。
下面程式向超全域變數 $_SESSION 添加了兩個變數:
複製代碼 代碼如下:<?php
session_start ();
$_SESSION [ "product1" ] = "Sonic Screwdriver" ;
$_SESSION [ "product2" ] = "HAL 2000" ;
echo "The products have been registered." ;
?>
在使用者移動到一個新的頁面之前,上面程式的神奇之處不會體現出來。下面的程式建立了一個單獨的 PHP 指令碼,這個指令碼訪問儲存在超全域變數 $_SESSION 中的變數。
複製代碼 代碼如下:<?php
session_start ();
echo "Your chosen products are:" ;
echo "
" ;
echo "
- " . $_SESSION [ "product1" ]. "
" ;
echo "
- " . $_SESSION [ "product2" ]. "
" ;
echo "
" ;
?>
下列程式清單建立一個表單,它允許一個使用者來選擇多個產品。我們可以使用會話變數來建立一個基本的購物車。
arraysession.php:
複製代碼 代碼如下:<?php
session_start ();
?>
Storing an array with a session
Product Choice Page
<?php
if ( isset ( $_POST [ "form_products" ])){
if (! empty ( $_SESSION [ "products" ])){
$products = array_unique (
array_merge ( unserialize ( $_SESSION [ "products" ]),
$_POST [ "form_produces" ]));
}
else
{
$_SESSION [ "products" ] = serialize ( $_POST [ "form_products" ]);
}
echo "
Your products have been registered!
" ;
}
?>
go to content page
session1.php:
複製代碼 代碼如下:<?php
/*
* Created on 2011-1-19
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
session_start ();
?>
Accessing session variables
Content Page
<?php
if ( isset ( $_SESSION [ "products" ])){
echo "
Your cart:
" ;
foreach ( unserialize ( $_SESSION [ "products" ]) as $p ){
echo "
- " . $p . "
" ;
}
echo "
" ;
}
?>
return to product choice page
6.在查詢字串中傳遞會話 ID
7.銷毀會話和重設變數
8.在一個帶有註冊使用者的環境中使用會話
希望本文所述對大家的php程式設計有所協助。
http://www.bkjia.com/PHPjc/945701.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/945701.htmlTechArticlephp使用Cookie實現和使用者會話的方法,phpcookie實現會話 本文執行個體講述了php使用Cookie實現和使用者會話的方法。分享給大家供大家參考。具體分析...