首頁 後端開發 php教程 PHP會話控制之cookie詳解

PHP會話控制之cookie詳解

Mar 26, 2018 pm 02:24 PM
cookie ie php

1.什麼是cookie:

有時也用其複數形式 Cookies,指某些網站為了辨別使用者身分、進行 session 追蹤而儲存在使用者本地端上的資料(通常經過加密)。 Cookies最典型的應用是判定註冊使用者是否已登入網站,使用者可能會得到提示,是否在下次進入此網站時保留使用者資訊以便簡化登入手續,這些都是Cookies的功用。另一個重要應用場合是「購物車」之類處理。使用者可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些資訊都會寫入Cookies,以便在最後付款時提取資訊。

優點:

相容性好

缺點:

1.增加了網路流量;

2.則是它的數據容量有限,最多只能儲存4KB的數據,瀏覽器之間各有不同;客戶端可以停用或清空Cookie,從而影響程式的功能。

3.是不安全。當多人共用一台電腦時使用Cookie可能會洩露使用者隱私, 帶來安全問題。

2.cookie工作原理:

Cookie是Web伺服器存放在使用者硬碟上的一段文本, 其中儲存著一些「鍵—值」對。每個Web網站都可以在使用者的機器上存放 Cookie, 並且可以在需要時重新取得 Cookie 資料。通常Web網站都有一個Cookie檔。使用者每次造訪網站A之前都會尋找網站A的Cookie文件,如果存在,則從中讀取使用者名稱和密碼「鍵—值」對資料。如果找到使用者名稱和密碼「鍵—值」對數據,則將其與存取請求一起傳送到網站A。網站A在收到存取請求時如果也收到了使用者名稱和密碼「鍵—值」對數據,則使用使用者名稱和密碼資料登錄,這樣使用者就不需要輸入使用者名稱和密碼了。如果沒有收到使用者名稱和密碼「鍵—值」對數據,則表示該使用者之前沒有成功登入過,此時網站A返回登入頁面給使用者。另外,每個Cookie都有一個有效期,過了有效期的Cookie就不能再使用了。 常用的Cookie操作是設定Cookie數據和讀取Cookie數據,刪除指定的Cookie數據。

語法:

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = " " [, bool $secure = false [, bool $httponly = false ]]]]]] )

setcookie() 定義了Cookie,會和剩下的HTTP 頭一起傳送給客戶端。 和其他 HTTP 頭一樣,必須在腳本產生任意輸出之前發送Cookie(由於協定的限制)。 請在產生任何輸出之前(包括 和  或空格)呼叫此函數。一旦設定 cookie後,下次開啟頁面時可以使用$_COOKIE讀取。 Cookie 值同樣也存在於 $_REQUEST

name: Cookie 名稱。

value:Cookie 值。 這個數值儲存在使用者的電腦裡,請勿儲存敏感資訊。 例如 name 是 ‘cookiename’, 可透過 $_COOKIE[‘cookiename’] 取得它的值。

expire:Cookie 的過期時間。 這是個 Unix 時間戳,也就是 Unix 紀元以來(格林威治時間 1970 年 1 月 1 日 00:00:00)的秒數。 也就是說,基本上可以用 time() 函數的結果加上希望過期的秒數。 或者也可以用 mktime()。 time()+60*60*24*30 就是設定 Cookie 30 天後過期。 如果設定成零,或忽略參數, Cookie 會在會話結束時過期(也就是關掉瀏覽器時)。

path:Cookie 有效的伺服器路徑。 設定成 ‘/’ 時,Cookie 對整個網域 domain 有效。 如果設定成 ‘/foo/’, Cookie 僅對 domain 中 /foo/ 目錄及其子目錄有效(例如 /foo/bar/)。 預設值是設定 Cookie 時的目前目錄。

domain:Cookie 的有效網域/子網域。 設定成子網域(例如 ‘www.example.com’),會使 Cookie 對這個子網域和它的三級網域有效(例如 w2.www.example.com)。 要讓 Cookie 對整個網域有效(包括它的全部子網域),只要設定成網域就可以了(這個例子裡是 ‘example.com’)。

secure:設定這個 Cookie 是否只是透過安全的 HTTPS 連線傳給客戶端。 設定成 TRUE 時,只有安全連線存在時才會設定 Cookie。 如果是在伺服器端處理這個需求,程式設計師需要僅在安全連線上傳送此類 Cookie (透過 $_SERVER[「HTTPS」] 判斷)。

httponly:設定成 TRUE,Cookie 僅可透過 HTTP 協定存取。 這意思是 Cookie 無法透過類似 JavaScript 這樣的腳本語言存取。 FALSE,則沒有限制。

傳回值

如果在呼叫本函數以前就產生了輸出,setcookie() 會呼叫失敗並傳回 FALSE。 如果 setcookie() 成功運行,則回傳 TRUE。當然,它的意思並非使用者是否已接受 Cookie。

設定和讀取cookie

<?php
    $value="my cookie value"; //发送一个简单的cookie
    setcookie("testcookie",$value,time()+60);  //set cookie?><!DOCTYPE html><html><head>
    <meta charset="UTF-8">
    <title>Testcookie</title></head><body>
    <?php 
        if(isset($_COOKIE["testcookie"])) //判断是否存在
            echo($_COOKIE["testcookie"]."<br>");
        print_r($_COOKIE);    ?></body></html>
登入後複製

刪除cookie

要刪除一個 Cookie,應該設定過期時間為過去,以觸發瀏覽器的刪除機制。

?>

用于记录当前用户访问网站的次数:

<?php

   if(isset($_COOKIE["num"]))        $num=$_COOKIE["num"];    else
       $num=0;                        //首次设置cookie

       $num=$num+1;                 
   setcookie("num",$num,time()+60*60) //发送一个cookie num记录访问次数?><!DOCTYPE html><html><head>
   <meta charset="UTF-8">
   <title>Testcookie</title></head><body>
   <?php 
       if($num>1)            echo("您已经第".$num."次访问本站点了。");        else
           echo("欢迎首次访问本站");        //关闭网页后,变量$num将被释放,但因为它的值已经保存再cookie中,所以下次打开网页会连续计数
   ?></body></html>
登入後複製

用户验证身份是验证cookie:

<?php  //身份验证cookie
   header("content-type:text/html;charset=utf-8");
   error_reporting(0);    //取输入的用户名和密码
       $uid=$_POST[&#39;username&#39;];        $upwd=$_POST[&#39;pwd&#39;];    //验证用户名和密码
   if($uid=="admin" && $upwd=="pass")
   {        echo("您已经登入成功,欢迎光临");        if($_POST[&#39;checkboxCookie&#39;]=="on")
       {
           setcookie("username",$uid,time()+60*60*24);
           setcookie("pwd",$upwd,time()+60*60*24);
       }
   }   
   else
       echo("登入失败,请返回重新登录");?><?php
   error_reporting(0);?><!DOCTYPE html><html><head>
   <meta charset="UTF-8">
   <title>Testcookie</title>
   <style type="text/css">form {    margin-top: 300px;    padding-left: 40%;}input[type="password"]{    margin-left: 16px;}input[type="reset"],input[type="submit"]{    margin-left: 80px;}</style></head><body>

   <form action="1.php" method="POST">

   <label>用户名:        <input type="text" name="uesrname" value=" <?php echo($_COOKIE["username"]);?>">    </label>
   <br><br>
                                                       <!-- 保留上次成功登入的用户名-->
   <lable>密码:    <input type="password" name="pwd" value="<?php echo($_COOKIE["password"]);?>" >    </lable>
                                                       <!-- 保留上次成功登入的用户名 -->
   <input type="checkbox" checked name="checkboxCookie">保留用户信息<br><br> <!-- 复选框 -->
   <input type="submit" name="put_info" value="登录">
   <input type="reset" name="rest_info" value="重置">
   </form></body></html>
登入後複製

相关推荐:

如何理解PHP中的会话控制

php中会话控制的深入理解

详细介绍php会话控制的实例代码

以上是PHP會話控制之cookie詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles