把数æ®å˜å‚¨åˆ°Session(Storing data in Session) ===================================================================== :doc:`Phalcon\\Session <../api/Phalcon_Session>` 组件æä¾›äº†ä¸€ç§é¢è±¡å¯¹è±¡çš„æ–¹å¼è®¿é—®sessionæ•°æ®ã€‚ åˆå§‹åŒ–Session -------------------- æœ‰ä¸€äº›åº”ç”¨ç¨‹åºæ˜¯ä¼šè¯å¯†é›†åž‹çš„ï¼Œå‡ ä¹Žæ‰€æœ‰çš„æ“作都需è¦è®¿é—®Sessionæ•°æ®ã€‚还有一些则ä¸å¤ªéœ€è¦ç”¨æˆ·ä¼šè¯ã€‚有了æœåŠ¡å®¹å™¨ï¼Œæˆ‘ä»¬å¯ä»¥ç¡®ä¿åªæœ‰åœ¨éœ€è¦å®ƒçš„æ—¶å€™ï¼Œå°±å¯ä»¥è®¿é—®å®ƒï¼š .. code-block:: php <?php //Start the session the first time when some component request the session service $di->setShared('session', function(){ $session = new Phalcon\Session\Adapter\Files(); $session->start(); return $session; }); å˜å‚¨/èŽ·å– Sessionæ•°æ® ---------------------------------- ä½ å¯ä»¥åœ¨æŽ§åˆ¶å™¨ï¼Œè§†å›¾æ–‡ä»¶ï¼Œä»¥åŠåªè¦ç»§æ‰¿è‡ª :doc:`Phalcon\\DI\\Injectable <../api/Phalcon_DI_Injectable>` çš„ç»„ä»¶ä¸æ–¹ä¾¿çš„访问sessionæœåŠ¡ï¼Œå¹¶ä¸”å¯æ–¹ä¾¿çš„å˜å‚¨æˆ–获å–它们的值。请看示例: .. code-block:: php <?php class UserController extends Phalcon\Mvc\Controller { public function indexAction() { //Set a session variable $this->session->set("user-name", "Michael"); } public function welcomeAction() { //Check if the variable is defined if ($this->session->has("user-name")) { //Retrieve its value $name = $this->session->get("user-name"); } } } 移除/é”€æ¯ Sessionæ•°æ® ---------------------------- ä½ å¯ä»¥ç§»é™¤æŒ‡å®šçš„sessionæ•°æ®ï¼Œä¹Ÿå¯é”€æ¯æ•´ä¸ªsession: .. code-block:: php <?php class UserController extends Phalcon\Mvc\Controller { public function removeAction() { //Remove a session variable $this->session->remove("user-name"); } public function logoutAction() { //Destroy the whole session $this->session->destroy(); } } Isolating Session Data between Applications ------------------------------------------- 有时,我们å¯èƒ½éƒ¨ç½²ç›¸åŒçš„应用程åºåœ¨åŒä¸€å°æœåŠ¡å™¨ä¸Šä¸¤æ¬¡ï¼Œè€Œä½¿ç”¨ç›¸åŒçš„会è¯ã€‚当然,如果我们在会è¯ä¸ä½¿ç”¨å˜é‡ï¼Œæˆ‘们希望æ¯ä¸ªåº”用程åºéƒ½æœ‰å…¶å•ç‹¬çš„ä¼šè¯æ•°æ®(å³ä½¿ç›¸åŒä»£ç 和相åŒçš„å˜é‡åç§°)ã€‚ä¸ºäº†è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œä½ å¯ä»¥åœ¨æŸä¸ªåº”用程åºä¸ä¸ºæ¯ä¸ªä¼šè¯åˆ›å»ºçš„å˜é‡æ·»åŠ ä¸€ä¸ªå‰è¾ï¼š .. code-block:: php <?php //Isolating the session data $di->set('session', function(){ //All variables created will prefixed with "my-app-1" $session = new Phalcon\Session\Adapter\Files( array( 'uniqueId' => 'my-app-1' ) ); $session->start(); return $session; }); Session Bags ------------ :doc:`Phalcon\\Session\\Bag <../api/Phalcon_Session_Bag>` 组件帮助把sessionæ•°æ®å¯¼å…¥åˆ° "namespaces"ã€‚é€šè¿‡è¿™ç§æ–¹å¼ï¼Œä½ å¯ä»¥è½»æ¾çš„创建一组会è¯å˜é‡åˆ°åº”用程åºä¸ï¼Œåªéœ€è®¾ç½®å˜é‡ä¸º "bag",它会自动å˜å‚¨ä¸ºsessionæ•°æ®ï¼š .. code-block:: php <?php $user = new Phalcon\Session\Bag(); $user->name = "Kimbra Johnson"; $user->age = 22; Persistent Data in Components ----------------------------- 控制器,组件,或者其他继承自 :doc:`Phalcon\\DI\\Injectable <../api/Phalcon_DI_Injectable>` 的类都å¯ä»¥æ³¨å…¥åˆ° :doc:`Phalcon\\Session\\Bag <../api/Phalcon_Session_Bag>`.ä½¿ç”¨è¿™ä¸ªç±»çš„ä¼šè¯æ•°æ®åœ¨æ¯ä¸ªç±»ä¸çš„å˜é‡æ˜¯éš”离开的,基于æ¤ï¼Œä½ å¯ä»¥éš”离æ¯ä¸ªè¯·æ±‚æŒä¹…化数æ®ã€‚ 译者注: 我曾在翻译tutorial invoç« èŠ‚æ—¶æµ‹è¯•è¿‡æ¤å±žæ€§ï¼Œå¹¶æ·»åŠ äº†æ³¨é‡Šã€‚å¯ä»¥æŸ¥é˜… :doc:`tutorial-invo <../reference/tutorial-invo>`,æœç´¢ '译者注'查看 .. code-block:: php <?php class UserController extends Phalcon\Mvc\Controller { public function indexAction() { // Create a persistent variable "name" $this->persistent->name = "Laura"; } public function welcomeAction() { if (isset($this->persistent->name)) { echo "Welcome, ", $this->persistent->name; } } } In a component: .. code-block:: php <?php class Security extends Phalcon\Mvc\User\Component { public function auth() { // Create a persistent variable "name" $this->persistent->name = "Laura"; } public function getAuthName() { return $this->persistent->name; } } 通过 ($this->session) æ·»åŠ çš„å˜é‡ï¼Œå¯åœ¨æ•´ä¸ªåº”用程åºè¿›è¡Œè®¿é—®ã€‚而通过 ($this->persistent) æ·»åŠ çš„å˜é‡ï¼Œåªèƒ½åœ¨å½“å‰ç±»è®¿é—®ã€‚ 实现自定义适é…器 ------------------------------ The :doc:`Phalcon\\Session\\AdapterInterface <../api/Phalcon_Session_AdapterInterface>` interface must be implemented in order to create your own translate adapters or extend the existing ones: .. code-block:: php <?php class MySessionHandler implements Phalcon\Session\AdapterInterface { /** * MySessionHandler construtor * * @param array $options */ public function __construct($options=null) { } /** * Starts session, optionally using an adapter * * @param array $options */ public function start() { } /** * Sets session options * * @param array $options */ public function setOptions($options) { } /** * Get internal options * * @return array */ public function getOptions() { } /** * Gets a session variable from an application context * * @param string $index */ public function get($index) { } /** * Sets a session variable in an application context * * @param string $index * @param string $value */ public function set($index, $value) { } /** * Check whether a session variable is set in an application context * * @param string $index */ public function has($index) { } /** * Removes a session variable from an application context * * @param string $index */ public function remove($index) { } /** * Returns active session id * * @return string */ public function getId() { } /** * Check whether the session has been started * * @return boolean */ public function isStarted() { } /** * Destroys the active session * * @return boolean */ public function destroy() { } }