哈佛公開課:構建動態網站——第二講PHP

第二講 PHP
     1.超全局變量$_GET, $_POST 。另外還有$_REQUEST但不要經常用這個,這個綜合了post和get的概念,可能會有用,但明確點更好。

第二講 PHP(續)

     1.推薦網站存儲路徑:/home/USER/project/0/html     //用於存放公開在網上供別人訪問的內容
                                          /lib     //用於存放網站本身所需要調用的一些函數
                                          /etc    //用於存放網站的相關配置
     如果要在/html目錄中的index.php中引用/etc目錄的helper.php中的某個函數,則可以用語句require("../etc/helper.php"),在php代碼中..這個可以用,但apache服務器不允許,這樣URL地址就不能用..了,這樣可以安全的保證網絡訪問者無法訪問他們不該訪問的其他目錄去。
     利用document root 指令可以設置html爲網絡上其他用戶能訪問的目錄。這樣避免一些敏感信息被泄露。
     2.爲了安全起見,最好把頭文件顯示的如PHP和apache版本號,關掉,。
     3. <?php session_start(); ?> 告訴網絡服務器記住此用戶。這在每個需要用到session的頁面開頭都要調用,但是更好的解決辦法是在config.php中使用,然後其他頁面調用config.php。

     4.$_SESSION,他和其他超全局變量一樣,也是關聯數組或哈希表,不過不同在於上一講的兩個超全局變量是通過用戶表單提交得到的數                     據。而$_SESSION纔是編程者自己的數據表,你可以往裏面存入任何需要的鍵值對。只要程序開頭執行了session_start()函數,當用戶走開回來再點擊另一個頁面時,編程者會得到相同的變量和內容。籠統的講這個變量裏面可能包含了購物車內的產品編號以及購買數量
  student問題回答:對於像亞馬遜這樣的網站,不斷的去讀取獲得SESSION值,確實對效率有影響,但沒辦法這就是HTTP所構建的世界,這在         Ajax中逐漸成爲一個問題,我們需要不斷刷新頁面,但HTTP不會像SSH這種有狀態連接這樣持續更新
     5. if($_SESSION["authenticated"]) //如果SESSION中存在一個叫authenticated的鍵值。

     6.爲了方便演示,臨時定義了:USER和PASS,本來應該在數據庫中的
login1.php:
          define("USER","jack");           //定義常量USER,其值爲jack
          define("PASS","qwe123");     //定義常量PASS,其值爲qwe123
          if(isset($_POST["user"]) && isset($_POST["pass"]))  //檢驗用戶提交信息中是否有這兩項
          {
               if($_POST[""user] == USER && $_POST["pass"] == PASS)
               {
                    $_SESSION["authenticated"] = TRUE;  //在login1.php中把這個設置爲true之後,而在其他頁面文件開頭都有session_start()函數因此都可以獲得該值

                    $host = $_SERVER["HTTP_HOST"];
                    $path = rtrim(dirname($_SERVER["PHP_SELF"]),"/\\");
                    header("Location: http://$host$path/home.php");   //登錄成功後重定向回homepage
                    exit; //表示登錄成功後跳轉並且不再執行後面的程序了,這在把兩個文件合併爲一個文件時非常好。
               }
          }




     7.上一講用了兩個文件,其中一個是表單頁面google.php和另一個是後臺處理頁面proc.php。由表單頁面把信息提交給處理頁面進行處理。。這樣做其實沒必要,因爲這兩個文件會造成更多的工作量而且還有個問題:如果我在提交表單後發現有一個地方填錯了,於是重新再回到表單頁面時就得把整個表單重填一次。所以最好的辦法就是把兩個文件合爲一體,然後用編程語言來判斷如上面第六條的第一個if語句表示user和pass同時設置了並且還進行了提交
     8.<? if($_SESSION["aut"])  ?>    //這樣寫會給出notice提示,如果代碼是自己用那可以用@屏蔽掉提示:if(@$_SESSION["aut"]),而規範的應是 if(isset($_SESSION["aut"]))
     9.$_SERVER 包含了服務器IP,服務器主機名,SSL是否開啓以及當前文件名等,如$_SERVER["PHP_SELF"]表示的就是當前文件名,可以用在標籤中,這種非硬編碼的方式當編程者改變文件名的時候就不用再去文件中修改相應的代碼瞭如:<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">
    10.目前講的這中登錄表單還有個小不足,也就是:當打錯用戶名或密碼時,通常網站會記錄用戶名而讓用戶重新輸入密碼的功能。
         在輸入用戶名的輸入欄的標籤中設置value值爲用戶的輸入<input name="user" type="text" value="<? echo htmlspecialchars($_POST["user"]); ?>" />
         其中的htmlspecialchars函數是爲了防止用戶在輸入欄中輸入html代碼或者javascript代碼,雖然輸入了也只是他們自己看到效果,但這也說明這是編程者的馬虎。該函數能把html中的特殊字符如&之類的轉化成字符實體,這樣用戶輸入什麼就正常顯示出這個字符
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章