亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

php使用Cookie實(shí)現(xiàn)和用戶會(huì)話的方法

 更新時(shí)間:2015年01月21日 15:09:59   投稿:shichen2014  
這篇文章主要介紹了php使用Cookie實(shí)現(xiàn)和用戶會(huì)話的方法,分析了Cookie的原理、設(shè)置與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了php使用Cookie實(shí)現(xiàn)和用戶會(huì)話的方法。分享給大家供大家參考。具體分析如下:

PHP 包含了很多的函數(shù),可以用來(lái)管理和記錄用戶信息,包括簡(jiǎn)單的 cookie 和全方位的用戶會(huì)話。會(huì)話使用 PHP 語(yǔ)言內(nèi)建的技術(shù),使得保存狀態(tài)就像是引用超全局變量那樣簡(jiǎn)單。

1.Cookie 簡(jiǎn)介

我們可以和 PHP 腳本一起使用 cookie 來(lái)存儲(chǔ)一些關(guān)于用戶的較小的信息。 Cookie 是由用戶瀏覽器存儲(chǔ)的少量數(shù)據(jù),它和一個(gè)來(lái)自服務(wù)器或腳本的請(qǐng)求一致。通過(guò)一個(gè)用戶的瀏覽器,一個(gè)單個(gè)的主機(jī)可以請(qǐng)求保存 20 個(gè) cookie 。每個(gè) cookie 包含一個(gè)名字、值和過(guò)期日期,以及主機(jī)和路徑信息。一個(gè)單個(gè)的 cookie 的大小限制是 4KB 。

在設(shè)置了 cookie 之后,只有發(fā)出請(qǐng)求的主機(jī)能夠讀取數(shù)據(jù),這就保證了用戶隱私得到尊重。另外,用戶可以配置自己的瀏覽器通過(guò)他接受或是拒絕所有 cookie 的請(qǐng)求。因此, cookie 應(yīng)該適度地使用,并且在沒(méi)有設(shè)計(jì)實(shí)現(xiàn)警告用戶的一個(gè)環(huán)境中,不應(yīng)該作為一個(gè)基本元素而依賴。

如果 Web 瀏覽器配置為存儲(chǔ) cookie ,它將保持基于 cookie 的信息直到過(guò)期日期。如果用戶使用瀏覽器瀏覽符合 cookie 的路徑和域的任何頁(yè)面,它將會(huì)把 cookie 重新發(fā)送給服務(wù)器。隨后,一個(gè) PHP 腳本能夠訪問(wèn) cookie , cookie 在環(huán)境變量 HTTP_COOKIE 中或者作為 $COOKIE 超全局變量的一部分,我們可以用 3 種方式來(lái)訪問(wèn)它們:

復(fù)制代碼 代碼如下:
echo $_SERVER["HTTP_COOKIE"];
echo getenv("HTTP_COOKIE");
echo $_COOKIE["vegetable"];

2.使用 PHP 設(shè)置一個(gè) cookie

我們可以用兩種方法在一個(gè) PHP 腳本中設(shè)置一個(gè) cookie 。首先,用 header() 函數(shù)來(lái)設(shè)置 SetCookie 標(biāo)頭。 Header() 函數(shù)需要一個(gè)字符串,該字符串隨后將包含到服務(wù)器響應(yīng)的標(biāo)頭部分。由于標(biāo)頭會(huì)為你自動(dòng)發(fā)送, header() 必須在發(fā)送給瀏覽器的熱河輸出之前調(diào)用。

復(fù)制代碼 代碼如下:
head("Set Cookie:vegetable=artichoke; expires=Tue,07-Mar-06 14:39:58 GMT;path=/;domain=yourmain.com");

盡管沒(méi)什么困難,這種設(shè)置 cookie 的方法還是需要我們編寫一個(gè)函數(shù)來(lái)構(gòu)建標(biāo)頭字符串。像這個(gè)例子那樣格式化日期并對(duì)名 / 值對(duì)進(jìn)行 URL 編碼并不是特別艱難的任務(wù),但它還是一項(xiàng)重復(fù)性的工作,因?yàn)?PHP 提供了一個(gè)函數(shù)來(lái)做到這些,這就是 setcookie() 。

Setcookie() 函數(shù)所做的事情就像它的名字所顯示的那樣,它輸出一個(gè) Set-Cookie 標(biāo)頭。因此,它應(yīng)該在任何其他內(nèi)容發(fā)送給瀏覽器之前調(diào)用。這個(gè)函數(shù)接受 cookie 名字、 cookie 值、 UNIX 時(shí)間戳格式的過(guò)期日期、路徑、域,以及一個(gè)整數(shù),如果 cookie 僅通過(guò)一個(gè)安全的連接發(fā)送的話,這個(gè)整數(shù)的值設(shè)置為 1. 除了第一個(gè)參數(shù)以外,這個(gè)函數(shù)的所有參數(shù)都是可選的。

復(fù)制代碼 代碼如下:
<?php
setcookie ( "vegetable" , "artichoke" , time ()+3600, "/" , ".yourdomain.com" , 0);
 
if ( isset ( $_COOKIE [ "vegetable" ])){
    echo "<p>Hello again, you have chosen: " . $_COOKIE [ "vegetable" ]. ".</p>" ;
}
else {
    echo "<p>Hello you. This may be your first visit.</p>" ;
}
?>

即便我們?cè)谀_本第一次運(yùn)行的時(shí)候設(shè)置 cookie , $_COOKIE["vegetable"] 變量也不會(huì)在這時(shí)候創(chuàng)建。由于只有當(dāng)瀏覽器將一個(gè) cookie 發(fā)送到服務(wù)器的時(shí)候,才會(huì)讀取它,因此,直到用戶重新訪問(wèn)這個(gè)域內(nèi)的一個(gè)頁(yè)面的時(shí)候,我們才能夠讀取它。
正式地講,要?jiǎng)h除一個(gè) cookie ,只需要調(diào)用帶有 cookie 名字參數(shù)的 setcookies():
setcookie("vegetable");
然而,這種方法并不總是奏效,并且不能依賴這種方法。相反,要?jiǎng)h除一個(gè) cookie ,使用一個(gè)確定已經(jīng)過(guò)期的時(shí)間來(lái)設(shè)置 cookie ,這種方法是最安全的:
Setcookie("vegetable", "", time()-60, "/", "yourdomain.com", 0);
還要確保傳遞給 setcookie() 與最初設(shè)置 cookie 時(shí)候所使用的是相同的路徑、域和安全參數(shù)。

3.會(huì)話函數(shù)概覽

當(dāng)一個(gè)訪客訪問(wèn)一個(gè)支持會(huì)話的頁(yè)面,要么分配一個(gè)新的標(biāo)識(shí)符,要么這個(gè)用戶和之前的訪問(wèn)已經(jīng)建立的一個(gè)標(biāo)識(shí)符重新關(guān)聯(lián)。任何已經(jīng)和會(huì)話相關(guān)聯(lián)的變量,都通過(guò) $_SESSION 超全局變量可供你的代碼使用。
會(huì)話狀態(tài)通常存儲(chǔ)在一個(gè)臨時(shí)文件中,盡管你可以使用一個(gè)名為 session_set_save_handler() 的函數(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)存儲(chǔ)。

4.開始一個(gè)會(huì)話

復(fù)制代碼 代碼如下:
<?php
session_start ();
echo "<p>Your session ID is " . session_id (). "</p>" ;
?>

5.使用會(huì)話變量

在每一個(gè) PHP 文檔中訪問(wèn)一個(gè)唯一的會(huì)話標(biāo)識(shí)符只是會(huì)話功能的開始。當(dāng)一個(gè)會(huì)話啟動(dòng)后,我們可以在超全局變量 $_SESSION 中存儲(chǔ)任意多個(gè)變量,然后在任何支持會(huì)話的頁(yè)面上訪問(wèn)它們。

下面程序向超全局變量 $_SESSION 添加了兩個(gè)變量:

復(fù)制代碼 代碼如下:
<?php
session_start ();
$_SESSION [ "product1" ] = "Sonic Screwdriver" ;
$_SESSION [ "product2" ] = "HAL 2000" ;
echo "The products have been registered." ;
?>

在用戶移動(dòng)到一個(gè)新的頁(yè)面之前,上面程序的神奇之處不會(huì)體現(xiàn)出來(lái)。下面的程序創(chuàng)建了一個(gè)單獨(dú)的 PHP 腳本,這個(gè)腳本訪問(wèn)存儲(chǔ)在超全局變量 $_SESSION 中的變量。
復(fù)制代碼 代碼如下:
<?php
session_start ();
echo "Your chosen products are:" ;
echo "<ul>" ;
echo "<li>" . $_SESSION [ "product1" ]. "</li>" ;
echo "<li>" . $_SESSION [ "product2" ]. "</li>" ;
echo "</ul>" ;
?>

下列程序清單創(chuàng)建一個(gè)表單,它允許一個(gè)用戶來(lái)選擇多個(gè)產(chǎn)品。我們可以使用會(huì)話變量來(lái)創(chuàng)建一個(gè)基本的購(gòu)物車。
arraysession.php:
復(fù)制代碼 代碼如下:
<?php
session_start ();
?>
<html>
<head>
<title> Storing an array with a session </title>
</head>
<body>
<h1> Product Choice Page </h1>
<?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 "<p>Your products have been registered!</p>" ;
}
?>
<form method = "POST" action = " <?php echo $_SERVER [ "PHP_SELF" ]; ?> " >
<p><strong> Select some products: </strong><br>
<select name = "form_product[]" multiple = "multiple" size = "3" >
<option value = "Sonic Screwdriver" > Sonic Screwdriver </option>
<option value = "Hal 2000" > Hal 2000 </option>
<option value = "Tardis" > Tardis </option>
<option value = "ORAC" > ORAC </option>
<option value = "Transporter bracelet" > Transporter bracelet </option>
</select>
<p><input type = "submit" value = "choose" /></p>
</form>
<p><a href = "session1.php" > go to content page </a></p>
</body>
</html>

 
session1.php:
復(fù)制代碼 代碼如下:
<?php
/*
  * Created on 2011-1-19
  *
  * To change the template for this generated file go to
  * Window - Preferences - PHPeclipse - PHP - Code Templates
  */
  session_start ();
?>
<html>
<head>
<title> Accessing session variables </title>
</head>
<body>
<h1> Content Page </h1>
<?php
if ( isset ( $_SESSION [ "products" ])){
    echo "<strong>Your cart:</strong><ol>" ;
    foreach ( unserialize ( $_SESSION [ "products" ]) as $p ){
       echo "<li>" . $p . "</li>" ;
    }
    echo "</ol>" ;
}
?>
<p><a href = "arraysession.php" > return to product choice page </a></p>
</body>
</html>

6.在查詢字符串中傳遞會(huì)話 ID

7.銷毀會(huì)話和重置變量

8.在一個(gè)帶有注冊(cè)用戶的環(huán)境中使用會(huì)話

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論