$ _COOKIEを$ _SESSIONとして使用します

このトピックは、私がプログラミングを始めたばかりの、遠く離れた子供時代に由来し、PHPの機能を整理しました。 当時、私はこの不正に驚いていました。通常の連想配列( $ _SESSION )と同様にセッションを操作でき、Cookieの場合はsetcookie()関数を使用する必要がありました。 その後、私はすでに経験を積んで、なぜこれがそのように行われたのかを理解しました。

時間が経ち、PHPが止まることはありません。SPLのような素晴らしいものがあります。その可能性の1つは、オブジェクトを配列としてアクセスすることです。 ArrayAccessインターフェースの実装。

そして今、私は子供時代のアイデアである$ _COOKIE配列を思い出し、それを実装しました:



<?php /*              */ $_COOKIE['lang'] = 'ru';
      
      







あなたはカットの下で実装を見ることができます





 <?php class CookieStorage implements ArrayAccess { //       const DEFAULT_EXPIRE_TIME = 1411200; // 2  //   private $_storage; //        $_COOKIE public function __construct($cookies) { $this->_storage = $cookies; } //   ArrayAccess     public function offsetExists ($offset) { return isset ($this->_storage[$offset]); } //   ArrayAccess    public function offsetUnset ($offset) { unset($this->_storage[$offset]); } //       public function offsetGet ($offset) { return $this->_storage[$offset]; } //      public function offsetSet ($offset, $value) { if( $this->_setCookie($offset, $value) ){ $this->_storage[$offset] = $value; } else{ trigger_error('Cookie value was not set', E_USER_WARNING); } } //    setcookie private function _setCookie( $name, $value, $expire = 0, $path = '/', $domain = false, $secure = false , $httponly = false ){ if (!headers_sent()){ if ($domain === false){ $domain = $_SERVER['HTTP_HOST']; } if( $expire == 0 ){ $expire = time() + self::DEFAULT_EXPIRE_TIME; } return setcookie ( $name, $value, $expire, $path, $domain, $secure, $httponly ); } return false; } } //        $_COOKIE = new CookieStorage( $_COOKIE );
      
      







このソリューションは、単純なsetcookie()関数と比較してどの程度優れていますか? 少なくとも、レコードはブラウザとグローバルな$ _COOKIE配列に同時に送られます(ページがリロードされる前であっても、それを操作する必要がある場合があります)。 このオプションでは、ほとんどのデフォルトパラメータを設定し、これらのパラメータを調整できます。 クラスを使用すると、特定の条件に応じて必要な機能を追加できます。



いずれにせよ、これは普遍的な理想的な解決策ではありません。 これは自転車です。はい、これは私の自転車です。 これは、%username%が好む可能性があるアイデアであり、問​​題に対する包括的なソリューションに発展させます。



All Articles