2012-01-17 78 views
0

我有一些功能(粘貼在一小段功能下面),我用它作爲單獨的功能,它運行良好。在PHP中使用cookie和會話類

現在我想把這個函數轉換成一些類。正如你所看到的,它適用於$_SESSION$_COOKIE

的問題是,它是否需要發送$_SESSION$_COOKIE作爲輸入數據而調用這個函數(我的意思是類似的東西:調用諸如protect($_SESSION, $_COOKIE),然後從裏面取功能他們)?或者它會工作而不發送它們?

... 
public function protect() { 
    session_start(); 

    if (isset($_SESSION['HTTP_USER_AGENT'])) { 
     if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { 
      $this->logout(); 
      exit; 
     } 
    } 

    if (!isset($_SESSION['id']) && !isset($_SESSION['login'])) { 
     if (isset($_COOKIE['id']) && isset($_COOKIE['key'])) { 

... 
+0

這個類/功能都是關於登錄和用戶授權的嗎? (如果是這樣,處理PHP會話和cookie接口似乎沒問題。) – mario 2012-01-17 15:02:37

回答

3

$_COOKIE$_SESSIONsuperglobals,這意味着它們在任何地方都可用。您永遠不需要導入它們,將它們作爲參數或類似的東西傳遞,它們始終可用於任何範圍。

出於這個原因,他們應該總是被視爲只讀 - 分配一個新的價值,他們會影響腳本執行的其餘部分在每個範圍。

1

你不需要通過$_SESSION$_COOKIE變量,因爲它們是超全局變量 - 從任何地方訪問... from the docs

這是一個 'superglobal',或自動全局變量。這僅僅意味着它在整個腳本的所有範圍內都可用。沒有必要做全局$變量;在函數或方法中訪問它。

2

$_SESSION AND $_COOKIE是超全球化的,這意味着它們在所有範圍內均可用。因此,不必將它們作爲參數傳遞給函數。

但是,在開始單元測試時,將它們作爲參數傳遞是有好處的。參數將使測試值的功能相當容易,而不需要它們在$_SESSION$_COOKIE中可用。