程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 從零開始之ecshop基礎篇(19)

從零開始之ecshop基礎篇(19)

編輯:關於PHP編程

(為入口文件減負,將入口文件實現的功能,挪到框架的基礎類中)

在框架目錄增加Framework.class.php

計劃:將需要初始化的公共功能,分模塊,形成框架基礎類的各個方法,分別調用執行,則可以完成項目的初始化功能。

使用靜態的方法類完成:(看成功能的集合,而不是圖紙設計對象;練習靜態使用)

注意,對魔術常量的處理

dirname()函數可以取得一個地址中的路徑部分

3

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/**
 * 初始化路徑常量
 */      }

 

注意:將保存請求參數的變量,讓在所有地方都可以被訪問到。

3
4
5
6
7
8
9
10
11
12
13
14

            }

注意:需要將保存配置信息的數組,全局化。

3
4
5
6
7
8
9

/**
 * 初始化配置文件
 */      }

因此,使用時,應該找到全局的config變量:

在初始化默認平台時:

define(

 

3
4
5
6
7
8
9
10
11
12
13
14

        

 

此時自動加載功能:

有函數的實現專程了 類靜態方法的實現

但是,PHP只認識一個叫__autoload()的函數,也就是php不能找到這個函數了。

處理方法:

告知php,在你需要找自動加載函數時,找我們定義的自動加載方法即可。

將一個普通函數(或者方法),注冊成自動加載功能函數

利用一個php函數:spl_autoload_register();將普通函數(方法)注冊成自動加載

參數,需要注冊的函數或者方法

參數函數:函數名即可,使用一個字符串即可

參數方法:類(對象)和方法名。使用一個數組,第一個元素類名,第二個元素方法名

spl_autoload_register(array('Framework','userAutoload));

3
4
5
6
7

 * 注冊自動加載方法
 */     spl_autoload_register( }

注意:自動加載的方法應該是公共的。

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

 * 注冊自動加載方法
 */     spl_autoload_register( }
 
   * 自動加載方法
  */                                  );            } 
                }   
                }
  }

在入口文件,加載Framework.class.php框架基礎類,運行run()程序運轉

index.php

3
4
5
6


判斷管理員登陸狀態

是否登陸標識(狀態)

 

應該如何保存登陸標識?

保存登陸標識的數據特征:

總結:需要一個在同一個浏覽器的多次請求間可以將數據傳遞(共享)處理方案。

難點就在於,php程序(凡事b/s,基於http協議),所有資源的最大生命周期就是腳本周期。

在浏覽器上記錄數據,最核心的解決方案。

cookie,session,會話技術。

 

 

setcookie()即可完成

setcookie('名字','值')

application/controller/back/AdminController.class.php

indexAction();

 

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

    session_start();
                    $result = $model_admin->checkByCookie();
                            }                     }
    }
    }

 

setcookie(名,值,有效期,有效目錄,有效域名)

setcookie第二個,只能字符串

setcookie('name',array('itcast','php'))

3
4

$arr = setcookie(setcookie(

此時,在獲取該變量時:

$_COOKIE['info']就變成一個有2個元素的數組

<input type="text" name="info[name]">$_POST['info'] = array()

默認,浏覽器關閉,也稱臨時cookie

利用setcookie的第三個參數,則可以被配置:使用一個時間戳,來表示有效期

time()獲得當前的時間戳。做加減,得到其他時間的時間戳。

典型的設置方法

3
4
5
6

 

 

3
4
5

//但是,浏覽器端的還是itcast

cookie是保存浏覽器端,php通過發出命令,才能在浏覽器上保存數據。

浏覽器上的cookie

利用firebug上網絡面板,監控浏覽器發出的請求與接到的響應:

在響應數據內,應該將數據發送的浏覽器端,告知浏覽器保存該cookie變量:

服務器,利用響應數據的一部分(響應頭),將設置的cookie的信息,發送到浏覽器:

在浏覽器發送的請求數據中將浏覽器認為有效的cookie攜帶到服務器端。

此時,服務器接收的該請求,發現存在cookie數據,利用這個數據,形成$_COOKIE數組,供用戶腳本使用

 

 

session與cookie,所解決的問題是相同的。

得到可以在同一個浏覽器的多次請求,將數據傳遞一個方法。

cookie劣勢:

數據直接存儲在浏覽器端,兩個顯著的問題:

方案:

在服務器上,保存數據。

如何保證數據可以在浏覽器的多次請求間傳遞,並且區分浏覽器。

在服務器端,為每個來訪的浏覽器端,都建一個獨立的數據空間。為每個數據空間分配一個唯一的標識,讓浏覽器保存這個唯一的標識。浏覽器每次請求時,攜帶標識過來,利用標識確定唯一的數據空間

總結:

session技術:將會話數據保存在服務器端,是浏覽器端保存存儲數據空間標識,浏覽器請求時攜帶標識,服務器負責利用標識,在相應的存儲空間內做數據處理。

 

session_start()可以開啟

利用預定義變量$_SESSION變量進行操作。增,刪,改,查都在$_SESSION上完成。

3
4
5
6
7
8

Tips;session技術時基於cookie技術,需要在cookie保存標識

在開啟session時,服務器會為浏覽器分配一個保存sessionID(session的標識)的cookie變量,保存到浏覽器端。

Tips:是一個整站有效的cookie變量

在浏覽器的接下來的請求中,都是攜帶該cookie變量,sessionID到服務器端:

 

默認的:php以文件的形式,保存每個獨立的數據空間的。被保存在,服務器端系統的臨時目錄內。

文件名,以當前的sessionID命名,保證空間唯一性。

可見,保存的時候是學歷惡化的結果。

兩個基本步驟:

 

 

只有$_SESSION的元素下表才能是數值型的。

 

unset($_SESSION['key']);刪除$_SESSION內的一個元素

如果刪除所有的session數據呢?

$_SESSION = array();

不對的:unset($_SESSION);,不會導致session數據丟失,php內部的session機制,還可以找到已經存在的處理好的session數據,將其寫到session數據空間內。

刪除session相關的存儲文件

session_destroy()函數可以完成

但是,刪除文件,$_SESSION數組內的數據還在:

但是,在執行session_destroy()後,腳本周期後的寫操作,則不執行。

 

如何完全刪除一個session的全部數據?

文件,$_SESSION,cookie內的sessionID變量

session_destory();

$_SESSION = array();

setcookie('PHPSESSID','',time() - 1);

 

典型的通過執行session_start()完成

支持,在配置文件中,自動開啟

但是,session如果重復開啟,則會報告一個錯誤:

典型的將錯誤屏蔽了即可

 

 

可以被配置:

session.save_handler php使用的session數據的處理的方式

可以改成user,表示用戶自定義

session.save_path

 

 

存儲位置不同

敏感度低,需要永久保存的數據,存到cookie內(用戶體驗)

安全性高,會話周期內存在的數據,保存到session內(數據合法性,合理性,完整性)

session可以保存各種數據類型

 

典型的將登陸驗證標識,保存到session中:

application/controller/back/AdminController.class.php

3
4
5
6
7
8
9
10
11
12

            }     }

 

application/controller/back/IndexController.class.php

3
4
5
6
7
8

                    
    }   
}

 

 

記錄登陸狀態

在登陸成功後,判斷是否選擇了保存登陸信息:

application/controller/back/AdminController.class.php

signinAction()

3
4

    

記錄什麼格式:

保密,可以被驗證

不能保存,後台登陸的信息

至少要成對,可以被驗證

設計成:

admin_id

處理過的密碼(在md5的基礎上,再加密處理)

3
4
5

        setcookie(}

application/controller/back/IndexController.class.php

indexAction()

3
4
5
6
7
8
9
10
11
12
13
14
15
16

        $result = $model_admin->checkByCookie();
                    $session_start();
            }             }
}

模型

在AdminModel內增加一個checkByCookie()方法:

application/model/AdminModel.class.php

3
4
5
6
7
8
9
10

                }
        }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved