模块

Cookie

Cookie 辅助类。

package
BootPHP
category
辅助类
author
Tinsh
copyright
© 2005-2016 Kilofox Studio

该类在 SYSPATH/classes/cookie.php 第 13 行声明。

属性

public static string $domain

限定 cookie 的可用域

NULL

public static integer $expiration

cookie 过期前的秒数

integer 0

public static boolean $httponly

只通过 HTTP 传输 cookie,禁用 Javascript 访问

bool false

public static string $path

限定 cookie 的可用路径

string(1) "/"

public static string $salt

添加到 cookie 的加盐

string(15) "40gyp31t68av57k"

public static boolean $secure

只通过安全连接传输 cookie

bool false

方法

public static delete( string $name ) (在 Cookie 中定义)

通过使值为空且过期来删除。

Cookie::delete('theme');

参数

  • string $name required - Cookie 名称

Tags

返回值

  • boolean

源代码

public static function delete($name)
{
	// 清除 cookie
	unset($_COOKIE[$name]);
	// 废除 cookie,使其失效
	return setcookie($name, NULL, -86400, Cookie::$path, Cookie::$domain, Cookie::$secure, Cookie::$httponly);
}

public static get( string $key [, mixed $default = NULL ] ) (在 Cookie 中定义)

获得签名的 cookie 的值。没有签名的 cookie 将不会返回。如果 cookie 签名存在,但无效,该 cookie 会被删除。

// 获取 "theme" cookie,如果 cookie 不存在,那么用 "blue"
$theme = Cookie::get('theme', 'blue');

参数

  • string $key required - Cookie 名称
  • mixed $default = NULL - 要返回的默认值

返回值

  • string

源代码

public static function get($key, $default = NULL)
{
	if (!isset($_COOKIE[$key]))
	{
		// cookie 不存在
		return $default;
	}
	// 获得 cookie 值
	$cookie = $_COOKIE[$key];
	// 找到加盐与内容的分割位置
	$split = strlen(Cookie::salt($key, NULL));
	if (isset($cookie[$split]) && $cookie[$split] === '~')
	{
		// 将加盐与值分离
		list ($hash, $value) = explode('~', $cookie, 2);
		if (Cookie::salt($key, $value) === $hash)
		{
			// Cookie 签名有效
			return $value;
		}
		// Cookie 签名无效,删除之
		Cookie::delete($key);
	}
	return $default;
}

public static salt( string $name , string $value ) (在 Cookie 中定义)

根据名称和值,为 cookie 生成一个加盐字符串。

$salt = Cookie::salt('theme', 'red');

参数

  • string $name required - Cookie 名称
  • string $value required - Cookie 值

返回值

  • string

源代码

public static function salt($name, $value)
{
	// 需要一个有效的加盐字符串
	if (!Cookie::$salt)
	{
		throw new BootPHP_Exception('A valid cookie salt is required. Please set Cookie::$salt.');
	}
	// 确定用户代理
	$agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : 'unknown';
	return sha1($agent . $name . $value . Cookie::$salt);
}

public static set( string $name , string $value [, integer $expiration = NULL ] ) (在 Cookie 中定义)

设置一个签名的cookie。注意,所有的 cookie 值必须为字符串,而且不能自动序列化!

// 设置 cookie "theme"
Cookie::set('theme', 'red');

参数

  • string $name required - Cookie 名称
  • string $value required - Cookie 值
  • integer $expiration = NULL - 以秒为单位的生命周期

Tags

返回值

  • boolean

源代码

public static function set($name, $value, $expiration = NULL)
{
	if ($expiration === NULL)
	{
		// 使用默认过期时间
		$expiration = Cookie::$expiration;
	}
	if ($expiration !== 0)
	{
		// 过期时间要求为 UNIX 时间戳
		$expiration += time();
	}
	// Add the salt to the cookie value
	$value = Cookie::salt($name, $value) . '~' . $value;
	return setcookie($name, $value, $expiration, Cookie::$path, Cookie::$domain, Cookie::$secure, Cookie::$httponly);
}