首頁  >  文章  >  後端開發  >  使用Cookie和使用者會話

使用Cookie和使用者會話

WBOY
WBOY原創
2016-08-08 09:29:15961瀏覽

 使用Cookie和使用者會話

Cookie

Cookie,儲存一些關於使用者的較小的資訊。它和一個來自伺服器或腳本的請求相符。透過一個使用者的瀏覽器,一個主機可以請求保存20個cookie.每個coopkie包含一個名字,值和過期日期,以及主機和路徑資訊。一個單一的cookie的大小限制是4kb。在設定了cookie之後,只有發出請求的主機能夠讀取數據,這就保證了用戶隱私得到尊重。另外,使用者可以設定自己的瀏覽器通知他接受或是拒絕所有的cookie的請求。

設定了一個cookie的PHP腳本發送的標頭的Set-Cookie項目可能如下:

Set-Cookie:vegetable=artichoke;path=/;domain=yourdomain.com

Set-Cookie標頭包含:

標頭包含:

一個名/值對(vegetable=artichoke),

一個路徑(path=/)和一個域(domain=yourdomain.com)。

如果設定了expiration字段,它會提供瀏覽器在哪個日期「忘記」cookie的值。如果沒有設定過期日期,當使用者會話過期的時候,也就是當使用者關掉瀏覽器的時候,cookie就過期了。

path欄位和domain欄位協同工作,因為path是找到domain的一個目錄,cookie應該會送回給伺服器的這個目錄下面。如果路徑是“/”,這是很常見的值,表示cookie可以由文檔根目錄下的任何檔案讀取。

如果路徑是「/products」,這個cookie只能夠被web網站的/products目錄下的檔案讀取。

隨後,一個PHP腳本將能夠存取cookie,cookie在環境變數HTTP_COOKIE中或作為$_COOKIE超全域變數的一部分,可以用三種方式存取它們:

echo $_SERVER["HTTP_COOKIE"];
echo getenv("HTTP_COOKIE");
echo $_COOKIE["vegetable"];
設定Cookie

<?php
/**
 *setcookie()函数输出一个Set-Cookie标头。它应该在任何其他内容发送给浏览器之前调用。
 *参数:cookie名字、cookie值、过期日期、路径、域、一个整数
 *如果cookie仅通过一个安全的连接发送的话,这个整数的值设为1。0表示在一个非安全的环境中发送。
 */
setcookie("vegetable","artichoke",time()+3600,"/","localhost",0);

if (isset($_COOKIE["vegetable"])){
	echo "<p>Hello again,you hava chosen:".$_COOKIE["vegetable"].".</p>";
	
}else {
	echo "<p>Hello you.This may be your first visit.</p>";
}
?> 
安全刪除cookie的方法同樣呼叫setcookie()函數,只需使用一個確定已經過期的時間,如:time()-60。

用戶會話

會話函數為使用者提供了一個唯一的標識符,隨後可以用來儲存和獲取連接到該標識符的資訊。當一個訪客訪問一個支援會話的頁面,要么分配一個新的標識符,要么這個使用者和先前的訪問已經建立的一個標識符重新關聯。任何已經和會話相關聯的變量,都透過$_SESSION超全域變數變得可供你的程式碼使用。會話狀態通常儲存在一個暫存檔案中,儘管你可以使用一個名為session_set_save_handler()的函數實作資料庫儲存。

開始一個會話,返回ID,並儲存變量,保存為session1.php。

<?php
session_start();
echo "<p>Your session ID is ".session_id().".</p>";
$_SESSION["product1"] = "Sonic Screwdriver";
$_SESSION["product2"] = "HAL 2000";
echo "The products have been registered.";
?>
存取儲存的會話變量,使用session_save_path()函數查看暫存檔案儲存在系統的哪個地方,並儲存為sesson2.php。

<?php
session_start();
echo "Your chosen products are:";
echo "<ul>";
echo "<li>".$_SESSION["product1"]."</li>";
echo "<li>".$_SESSION["product2"]."</li>";
echo "</ul>";
echo session_save_path();
?>

先訪問伺服器的sesson1.php,結果如下:


再訪問伺服器下的session2.php,結果如下:


在該路徑下找到sess_curdcq4agn1到已註冊的變數是如何保存的。

當一個值放置在$_SESSION超全局變數中,PHP把變數名稱和值寫入一個檔案中,這個資訊可以讀取且變數可以稍後恢復。當我們把這個變數加到超全域變數$_SESSION後,你仍然可以在腳本執行過程中的任何時刻修改其值,但是,這個修改後的值不會反映到全域設定中,直到把這個變數重新分配給超全域變數$_SESSION。 

  • 使用Cookie和使用者會話
大小: 130.8 KB
  • 使用Cookie和使用者會話
229.8 B
  • 使用Cookie和使用者會話
  • 查看圖片附件
以上就介紹了使用Cookie和使用者會話,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn