2012-01-17 9 views
0

私は別の機能として使用したいくつかの機能(小さな機能の下に貼り付け)を持っており、うまく機能しました。PHPクラス内でのクッキーとセッションの操作

今、このファンクションをいくつかのクラスに移動したいと思います。ご覧のとおり、$_SESSION$_COOKIEで動作します。

質問この関数を呼び出すときに$_SESSION$_COOKIEを入力データとして送信する必要がありますか(つまり、protect($_SESSION, $_COOKIE)のような呼び出しをしてから、関数内から呼び出します)。それを送信せずに動作しますか?あなたは、彼らがスーパーグローバルあるよう$_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セッションとクッキーのインターフェースは大丈夫です。) – mario

答えて

3

$_COOKIEおよび$_SESSIONは、superglobalsであり、どこでも入手可能であることを意味します。あなたはそれらをインポートする必要はありません、それらを引数またはそれに類するものとして渡すことは決してありません。それらはいつでもどんなスコープでも利用できます。

常には読み取り専用として扱う必要があります。新しい値を割り当てると、すべてのスコープで実行される残りのスクリプトに影響します。

1

- どこからでもアクセス可能... from the docs

これは「スーパーグローバル」あるいは自動グローバル変数です。これは、単にスクリプトを通してすべてのスコープで使用できることを意味します。グローバル$変数を行う必要はありません。関数またはメソッド内でアクセスします。

2

$_SESSIONおよび$_COOKIEはすべてのスコープで使用可能なスーパーグローバルです。したがって、それらを関数のパラメータとして渡すことは厳密には必要ではありません。

ただし、単体テストを開始するときにパラメータとして渡すと効果があります。パラメータは、$_SESSIONまたは$_COOKIEで利用可能にすることなく、関数に値をテストすることをかなり容易にします。