php使用Cookie實現和使用者會話的方法,phpcookie實現會話_PHP教程

來源:互聯網
上載者:User

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 "
  1. " . $p . "
  2. " ;
    }
    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實現和使用者會話的方法。分享給大家供大家參考。具體分析...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.