目录
当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

Session 用法 - 类別

优质
小牛编辑
130浏览
2023-12-01

Session 类别能让你为你的应用程序在无状态(stateless)的 web 环境下保持状态。 它能让你在伺服器上使用各种变数解决方案来储存变数,并且在下个页面请求再呼叫变数。

记录在本页的静态方法使用透过设定配置中 driver 设定配置的 session 驱动。 当你已经设定 auto_initialize 设定为 true 时,session 会被初始化在 Session 类别载入时。 如果它设为 false,你将必须使用以下方法之一,或手动开始一个 session 实例来初始化 session。

如果你的应用程序需要 session 支援,"always_load" 你的 session 类别,或确保你的(基础)控制器会载入它。 如果你载入它,但选择不 auto_initialize session,而且你没使用任何的 session 方法, session 将不会被刷新!这可能因为逾期的 session 造成你应用程序无法预期的行为。

垃圾回收

session 驱动有内建的垃圾回收机制来移除失效的条目。 具有内建支援资料过期的储存后端,例如 APC、Memcached 或 Redis,会使用此功能, 并会自动到期失效的快取条目。

储存后端,例如资料库或档案系统驱动,不会使用 gc_probability 设定来确定是否需要垃圾回收。 如果是这样的话,它们将在页面已经传送给使用者之后的一个 shutdown 事件执行它。 这种方法的缺点是,如果这需要一点时间,页面将不会完成,而会是「载入中……」直到 GC 完成。

当使用 cookie,请 务必 确保配置在你的 app/config/config.php 及/或你的 php.ini 档案中的时区与设定在你伺服器上的时区相符。因为 cookie 的到期时间戳记是 GMT,当你时区有不相符时, 计算到期时间将导致严重错误,从不正确的过期到 cookie 完全不被设定, 因为它们到达浏览器时已经逾期。

instance($instance = null)

instance 方法回传预设的 session 实例,或一个指定的实例,透过名称识别。

静态
参数
参数预设描述
$instance
null
识别需求的 session 实例的 Cookie 名称(如在 config/session.php 定义的)。
回传混合 - session 物件,或 false 在请求的实例不存在时。
範例
// 取得预设 session 实例(由 'driver' 配置设定所标识)。
$session = Session::instance();

// 取得一个指定 session 实例
$session = Session::instance('myappcookie');

set($variable, $value = null)

set 方法能让你设定一个 session 变数。

静态
参数
参数类型预设描述
$variable字串|阵列必要要设定或关联值阵列的 session 变数名称。
$value混合
null
session 变数值。
这可以是任何资料型态,但注意当在 session 中储存物件,做为 session 资料是序列化的,而且要序列化一个物件是有限制的。
回传FuelCoreSession_Driver - 可鍊结
範例
// 在 session 中储存 userid
Session::set('userid', $userid);

// 你也可以储存更複杂的值
Session::set('array', array('varA', 'varB', 'varC' => array('val1', 'val2'));

// 你也可以使用一个阵列来同时设定多个值
Session::set(array(
	'userid' => $userid,
	'has_cookies' => function()
	{
		return (bool) \Cookie::get('has_them', false);
	}
));

// 你也可以鍊结呼叫来设定值
Session::set('userid', $userid)->set('foo', 'bar');

get($variable = null, $default = null)

get 方法能让你从 session 检索变数。

静态
参数
参数预设描述
$variable
null
要取得的 session 变数名称。如果没指定,所有 session 变数会被回传。
$default
null
在请求的变数不存在时要回传的预设值。如果没给预设,该方法将回传 null
回传混合 - 依据储存的 $variable 型态。该方法回传 null 如果请求的变数不存在。
範例
// 从 session 取得储存的 userid
$userid = Session::get('userid');
if ( $userid === false )
{
	echo "no user is logged in";
}

// 你可以检索整个储存的阵列
$arr = Session::get('array');

// 或从阵列取得一个指定的键
$arr = Session::get('array.varC');

// 取得所有 session 变数
$vars = Session::get();

delete($variable)

delete 方法能让你删除一个储存的 session 变数。

静态
参数
参数预设描述
$variable必要要删除的 session 变数名称。
回传FuelCoreSession_Driver - 可鍊结
範例
// 从 session 删除储存的 userid
Session::delete('userid');

// 你也可以从阵列删除指定的键
Session::delete('array.varC');

set_flash($variable, $value = null)

set_flash 方法能让你设定一个 session 快闪变数。快闪变数的生命週期有限。根据配置的不同,它们将在下个页面请求之后,或在被检索被删除。

静态
参数
参数预设描述
$variable必要要设定的 session 快闪变数名称。
$value
null
session 快闪变数值。
这可以是任何资料型态,但注意当在 session 中储存物件,做为 session 资料是序列化的,而且要序列化一个物件是有限制的。
回传FuelCoreSession_Driver - 可鍊结
範例
// 告诉下一页的请求要处理哪个步骤
Session::set_flash('step', 2);

// 你也可以储存更複杂的值
Session::set_flash('array', array('varA', 'varB', 'varC' => array('val1', 'val2'));

此方法支援有限的「句点表示法」来在一个多维阵列中储存元素。只有最上层有版本化, 整个多维阵列会同时过期。

get_flash($variable, $default = null, $expire = false)

get_flash 方法能让你取得一个 session 快闪变数。快闪变数有生命週期的限制。根据配置的不同,它们将在下个页面请求之后,或在被检索被删除。

静态
参数
参数预设描述
$variable必要要取得的 session 变数名称。
$default
null
在请求的变数不存在时要回传的预设值。如果没给预设,该方法将回传 null
$expire
false
如果为 true,session 变数立即过期,即使它在同一个请求中被设定。
回传混合 - 依据储存的 $variable 型态。该方法回传 null 如果请求的变数不存在。
範例
// 找出要处理哪个步骤
$step = Session::get_flash('step');

此方法支援「句点表示法」来从一个多维阵列中检索元素。

keep_flash($variable)

keep_flash 方法重设一个储存在 session 中的快闪变数为「未请求」状态。这能让你取得一个快闪变数,并继续传递它到下个页面请求。

静态
参数
参数预设描述
$variable必要要保留的快闪变数名称。
回传FuelCoreSession_Driver - 可鍊结
範例
// 保留步骤值给更多页面请求
Session::keep_flash('step');

delete_flash($variable)

delete_flash 方法能让你删除一个储存的快闪变数。

静态
参数
参数预设描述
$variable必要要删除的快闪变数名称。
回传FuelCoreSession_Driver - 可鍊结
範例
// 从 session 删除步骤
Session::delete_flash('step');

create()

create 方法能让你建立一个新的 session,如果 session 已经存在,当新的建立时它将被销毁。

静态
参数
回传FuelCoreSession_Driver - 可鍊结
範例
// 建立一个新 session
Session::create();

destroy()

destroy 方法能让你销毁一个存在的 session。

静态
参数
回传FuelCoreSession_Driver - 可鍊结
範例
// 销毁一个 session
Session::destroy();

read()

read 方法能让你手动读取一个 session。当 session 类别初始化时 session 会自动读取,所以在一般情况下是不需要使用此方法。

静态
参数
回传FuelCoreSession_Driver - 可鍊结
範例
// 读取 session
Session::read();

write()

write 方法能让你手动写入 session。在正常情况下,session 会在指令码结束时自动写入。

静态
参数
回传FuelCoreSession_Driver - 可鍊结
範例
// 写入 session
Session::write();

rotate()

rotate 方法能让你手动转动 session ID。 在一般情况下,session ID 会如定义在配置中的週期定期地自动转动, 做为额外安全措施,你可能想要手动转动它, 例如当你变更已登入使用者的权限。

静态
参数
回传FuelCoreSession_Driver - 可鍊结
範例
// 转动 session
Session::rotate();

key()

key 方法能让你检索 session 键的元素, 唯一地识别 session。

静态
参数
参数预设描述
$name选择性键元素的名称。预设情况下,它是设为 'session_id'。 其他可能可用的元素有 'ip_hash'、'created'、'updated'、 'user_agent' 和 'payload'。
回传混合 - 元素值,或 false 如果请求的元素不存在。
範例
// 取得目前 session id
$session_id = Session::key('session_id');