打印本页
%13 %126 %2014 %10:%六 %AM

Joomla常用对象 Session

作者
给本项目评分
(2 得票数)

本节将要介绍一下joomla的session操作类。解决页面间参数传递的问题。

当一个用户开始访问joomla网站的时候,那么系统就会创建一个session.即使用户没有登录,系统照样会创建一个session.在PHP中我们通过$_SESSION来操作session,在Joomla中,系统提供一个全局的JSession对象。这个对象通过对$_SESSION的操作进行封装,提供我们更加方便操作session的接口。

session一般的是用来在在不同页面间进行传递从参数的。当我们要读取一个参数,可以使用Jsession对象的get()方法,该方法提供3个参数,一个参数是参数的名称,一个是参数的默认值,一个是参数的命名空间。系统利用命名空间来避免数据的冲突,如果我们不提供命名空间,那么系统会提供一个默认的命名空间“default”.下面是一段典型的从session中读取数据的代码:

<?php
  $session = JFactory::getSession();
  $value = $session->get("userName","admin");
?>

一般情况下,我们都是从默认的命名空间中读取数据。所以get方法的第二个参数不是命名空间,而是参数的默认值。

JSession提供了一个set()方法来向session中设置变量。一个典型的调用方法如下:

<?php
$session = JFactory::getSession();
$session->set("userName","test","zmax");
?>

上面的代码中,我们在session的zmax空间中设置了一个变量,该变量的名称为userName,该变量的值为test.

由于JSession类能处理的命名空间是有限制的,因此推荐尽量使用默认的命名空间(defaut)来存储。为了方便操作,joomla系统在JSession中还提供了一个特殊的区域"user_state“.

在user-state中存储的是一个JRegistry对象,我们可以在default.registry中访问JRegistry这个对象。请注意,因为这个对象存储在session中,因此是可以跨页面使用的。系统提供两个方法来操作这个对象。getUserState()和getUserStateFromRequest().

我们通过调用getUserState()方法来获取JRegistry这个对象的值。一端典型的代码如下:

<?
 $app = JFactory::getAppliction();
 $app->getUserState('session.counter');
?>

上面的代码演示了如何获取session.counter的值,这个值代表了用户请求的数量。

如果要设置一个值,我们可以用setUserState()方法来完成。典型的代码:

<?php
 $app = JFactory::getApplication();
$app->setUserState('test',"testvalue");
?>

getUserStateFromRequest()方法和getUserState()方法用法类似,但是getUserStateFromRequest方法会首先检查请求页面传递的参数,如果参数参数存在,就会用存数的值更新session中原先的值,最后将更新后的值返回。

getUserStateFromRequest()方法有3个参数,一个是键(一个路径,具体什么意思,暂时还不清楚),一个是变量的名称,一个事变量的默认值。典型的代码如下:

<?php
 $app = JFactory::getApplication();
$app->getUserStateFromRequest('com_myextension.list.filter.order','filter_order','name');
?>

一般情况下这个方法通常用在分页中。因为这个方法允许用户修改本身的状态。哦,顺便说一下,没有setUserStateFromRequest()方法。

Joomla的session数据可以存储到多种地方。Joomla用session storage类去储存session数据。现在一般有数据库,Php-eacclerator和PHP-pecl-apc这些方法来存储session数据。

请注意,session数据的大小是由限制的,不能超过65535个字符。

为了方便理解:贴出Jessionl类的get方法的代码:

/**
	 * Get data from the session store
	 *
	 * @param   string  $name       Name of a variable
	 * @param   mixed   $default    Default value of a variable if not set
	 * @param   string  $namespace  Namespace to use, default to 'default'
	 *
	 * @return  mixed  Value of a variable
	 *
	 * @since   11.1
	 */
	public function get($name, $default = null, $namespace = 'default')
	{
		// Add prefix to namespace to avoid collisions
		$namespace = '__' . $namespace;

		if ($this->_state !== 'active' && $this->_state !== 'expired')
		{
			// @TODO :: generated error here
			$error = null;
			return $error;
		}

		if (isset($_SESSION[$namespace][$name]))
		{
			return $_SESSION[$namespace][$name];
		}
		return $default;
	}

 

阅读 3522 次数 最后修改于 %16 %190 %2014 %11:%六 %AM