中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Zend Framework之Zend_Session會話操作的示例分析

發布時間:2021-09-02 09:34:37 來源:億速云 閱讀:167 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Zend Framework之Zend_Session會話操作的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Zend Framework之Zend_Session會話操作的示例分析”這篇文章吧。

具體如下:

會話命名空間

實現會話

代碼:

<?php
require_once "Zend/Session/Namespace.php";
$myNamespace = new Zend_Session_Namespace('Myspace');
if(isset($myNamespace->numberOfPageRequests))
{
  $myNamespace->numberOfPageRequests++;
}else{
  $myNamespace->numberOfPageRequests = 1;
}
echo "用戶的瀏覽次數為:";
echo "<font size=\"6\" color=\"#ff0000\">";
echo $myNamespace->numberOfPageRequests;
echo "</font>次";

結果:

用戶的瀏覽次數為:10次

遍歷會話命名空間

代碼:

<?php
require_once "Zend/Session/Namespace.php";
$myNamespace = new Zend_Session_Namespace('Myspace');
$myNamespace->webhost = "127.0.0.1";
$myNamespace->hostname = "localhost";
$myNamespace->user = "root";
$myNamespace->password = "123456";
$myNamespace->db_name = "test";
$myNamespace->db_type = "Sqlite";
foreach($myNamespace as $index=>$value){
  echo "命名空間myNamespace中的:".$index;
  echo "為".$value."<p>\n";
}

結果:

命名空間myNamespace中的:webhost為127.0.0.1
命名空間myNamespace中的:hostname為localhost
命名空間myNamespace中的:user為root
命名空間myNamespace中的:password為123456
命名空間myNamespace中的:db_name為test
命名空間myNamespace中的:db_type為Sqlite

點評:

它會把這個對象所對應空間中的所有內容遍歷出來。很神奇。

訪問會話命名空間

代碼:

<?php
require_once "Zend/Session/Namespace.php";
$login = new Zend_Session_Namespace('other');
$login->user = "Administrator";
if(isset($login->user)){
  echo "\$login->user已經有值,其值為:";
  echo $login->user;
  unset($login->user);
}else{
  echo "\$login->user無值";
}
echo "<p>";
if(isset($login->pass)){
  echo "\$login->pass已經有值,其值為:";
  echo $login->pass;
  unset($login->pass);
}else{
  echo "\$login->pass無值";
}
foreach($login as $index=>$value){
  echo "命名空間login中的:".$index."為".$value."<p>\n";
}

結果:

$login->user已經有值,其值為:Administrator
$login->pass無值

會話的高級應用

開啟會話,有兩種方法

一、使用Zend_Session::start()開啟會話

二、new Zend_Session_Namespace()

鎖定會話命名空間

代碼:

<?php
require_once "Zend/Session/Namespace.php";
$test = new Zend_Session_Namespace('test');
$test->name = "玉皇大帝";
$test->sex = "男";
$test->lock();
if($test->isLocked()){
  echo "會話\$test已經鎖定!<p>";
  echo "命名空間\$test中的成員name的值為:";
  echo $test->name;
}else{
  echo "會話\$test已經解鎖!";
}
echo "<p>";
$test->unLock();
if($test->isLocked()){
  echo "會話\$test已經鎖定!<p>";
  echo "命名空間\$test中的成員name的值為:";
  echo $test->name;
}else{
  echo "會話\$test已經解鎖!";
}

結果:

會話$test已經鎖定!

命名空間$test中的成員name的值為:玉皇大帝

會話$test已經解鎖!

點評:

由此可見,鎖定并不影響結果的輸出。

分析源代碼

public function lock()
{
    self::$_namespaceLocks[$this->_namespace] = true;
}
/**
* unlock() - unmark a session/namespace to enable read & write
*
* @return void
*/
public function unlock()
{
    unset(self::$_namespaceLocks[$this->_namespace]);
}
/**
* unlockAll() - unmark all session/namespaces to enable read & write
*
* @return void
*/
public static function unlockAll()
{
    self::$_namespaceLocks = array();
}
/**
* isLocked() - return lock status, true if, and only if, read-only
*
* @return bool
*/
public function isLocked()
{
    return isset(self::$_namespaceLocks[$this->_namespace]);
}

可知,它只是改變了參數而已。

為會話設置生命周期

setExpirationSeconds()方法與setExpirationHops()兩種方法來設置。

代碼:

<?php
require_once "Zend/Session/Namespace.php";
$s = new Zend_Session_Namespace('temp');
$s->a = "蘋果";
$s->p = "梨";
$s->o = "桔子";
$s->setExpirationSeconds(60);
$s->setExpirationHops(2,'a');
$s->setExpirationHops(3,'p');
echo "已經為命名空間\$s設置生命期<p>";

設置生命期代碼,其實它針對的是命名空間來設置的。

測試代碼:

<?php
require_once "Zend/Session/Namespace.php";
$b = new Zend_Session_Namespace('temp');
echo "\$b->a內容為:".$b->a;
echo "<p>";
echo "\$b->p內容為:".$b->p;

先執行設置生命期代碼,在執行測試代碼會看到效果。

第一次:
$b->a內容為:蘋果
$b->p內容為:梨
第二次:
$b->a內容為:蘋果
$b->p內容為:梨
第三次:
$b->a內容為:
$b->p內容為:梨
第四次:
$b->a內容為:
$b->p內容為:

點評:刷新兩次之后,就會有消失。之后陸續消失。超過60秒效果相同。

分析源代碼,

public function setExpirationSeconds($seconds, $variables = null)
{
    if (parent::$_writable === false) {
      /**
       * @see Zend_Session_Exception
       */
      require_once 'Zend/Session/Exception.php';
      throw new Zend_Session_Exception(parent::_THROW_NOT_WRITABLE_MSG);
    }
    if ($seconds <= 0) {
      /**
       * @see Zend_Session_Exception
       */
      require_once 'Zend/Session/Exception.php';
      throw new Zend_Session_Exception('Seconds must be positive.');
    }
    if ($variables === null) {
      // apply expiration to entire namespace
      $_SESSION['__ZF'][$this->_namespace]['ENT'] = time() + $seconds;
    } else {
      if (is_string($variables)) {
        $variables = array($variables);
      }
      foreach ($variables as $variable) {
        if (!empty($variable)) {
          $_SESSION['__ZF'][$this->_namespace]['ENVT'][$variable] = time() + $seconds;
        }
      }
    }
}

其實它還是基于PHP原始的Session來實現的。只是擴展了部分功能。

public function setExpirationHops($hops, $variables = null, $hopCountOnUsageOnly = false)
{
    if (parent::$_writable === false) {
      /**
       * @see Zend_Session_Exception
       */
      require_once 'Zend/Session/Exception.php';
      throw new Zend_Session_Exception(parent::_THROW_NOT_WRITABLE_MSG);
    }
    if ($hops <= 0) {
      /**
       * @see Zend_Session_Exception
       */
      require_once 'Zend/Session/Exception.php';
      throw new Zend_Session_Exception('Hops must be positive number.');
    }
    if ($variables === null) {
      // apply expiration to entire namespace
      if ($hopCountOnUsageOnly === false) {
        $_SESSION['__ZF'][$this->_namespace]['ENGH'] = $hops;
      } else {
        $_SESSION['__ZF'][$this->_namespace]['ENNH'] = $hops;
      }
    } else {
      if (is_string($variables)) {
        $variables = array($variables);
      }
      foreach ($variables as $variable) {
        if (!empty($variable)) {
          if ($hopCountOnUsageOnly === false) {
            $_SESSION['__ZF'][$this->_namespace]['ENVGH'][$variable] = $hops;
          } else {
            $_SESSION['__ZF'][$this->_namespace]['ENVNH'][$variable] = $hops;
          }
        }
      }
    }
}

處理放在了構造函數中。

以上是“Zend Framework之Zend_Session會話操作的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳县| 江陵县| 临猗县| 乌海市| 临汾市| 高台县| 祥云县| 罗定市| 文成县| 竹北市| 瑞安市| 楚雄市| 莒南县| 绿春县| 昔阳县| 边坝县| 泾源县| 南漳县| 日土县| 嘉义县| 涞水县| 怀柔区| 怀仁县| 延吉市| 綦江县| 昆明市| 白朗县| 保靖县| 治县。| 高青县| 宿迁市| 河西区| 夏河县| 天柱县| 漳州市| 庄河市| 丰台区| 青川县| 含山县| 班玛县| 新干县|