Archive for May, 2007

PHP中处理Session的函数(Session Handling Functions)

Friday, May 25th, 2007

session_cache_expire — 设置或者获取session过期的时间
session_cache_limiter — 设置或者获取session缓存的类型
session_commit — 终止由session_start()函数开启的session可写入状态 session_write_close()函数的别名
session_decode — D将被序列化的session数据还原
session_destroy — 销毁所有的已注册的session
session_encode — 序列化当前session中的所有数据
session_get_cookie_params — 获取session cookie的相关数据的参数
session_id – 定义或者获取当前的session id
session_is_registered — 检测一个session是否已注册
session_module_name — 取得或者设置一个session的储存形式
session_name — 设置或者取得一个session name
session_regenerate_id — 更新现有的session id
session_register — 将一些字符串或者数组注册到session中
session_save_path — 设置或者取得一个session在服务器短的保存路径
session_set_cookie_params — 设置session cookie的相关数据的参数
session_set_save_handler — 方便自定义的设置session在服务器端的相关操作
session_start — 开启session
session_unregister — 取消一个已注册的session
session_unset — 清空所有注册了的session值
session_write_close — 终止由session_start()函数开启的session可写入状态

session_id()函数的作用是显示session id,这个session id是一个32位的字符串,是每个用户使用session是的钥匙。session_id()函数有唯一的一个参数,可以用作定义session id。
session_regenerate_id()函数的作用是更新现有的session id,session_regenerate_id()函数有一个参数,如果设置为True,则会删除原有session中保留的数据,默认为False。

<?php
echo session_id();
// 显示类似 0eed388085575e0567998c5b1428e1a0
 
session_id("hello");
echo session_id();
// 显示 hello
 
session_regenerate_id();
echo session_id();
// 显示类似 fb52824bbf4eaede7491930d478b7300
?>

session_start()函数的作用是启用session,只有在session_start之后,session的所有注册和销毁功能才能被使用。
session_register()函数的作用是将一些字符串或者数组注册到session中。如果注册成功,返回True,失败返回False。
session_unregister()函数的作用是取消一个已注册的session,作用和session_register()函数刚好相反,一次只能取消一个。

<?php
session_start();
$test1 = "hello";
session_register("test1");
echo $_SESSION['test1']; //显示hello
 
$test2 = array("time"=>"world","give"=>"cool");
session_register("test2");
echo $_SESSION['test2']["time"]; //显示world
 
session_unregister('test1');
echo $_SESSION['test1']; //显示不了"hello"了
?>

session_name()函数的作用是设置或者取得一个session name。PHP默认的session name是PHPSESSID,一般是不需要修改的。

<?php
echo session_name(); //显示 PHPSESSID
 
session_name("hello");
echo session_name(); //显示 hello
?>

session_is_registered()函数的作用是检测一个session是否已注册。对已经注册的session则返回True。

<?php
session_start();
$test = "hello";
session_register("test");
echo session_is_registered("test");
// 显示 1 (True)
?>

session_unset()函数的作用是清空所有注册了的session值。session_destroy()函数的作用是销毁所有的已注册的session。这两个函数的细微差别并不会对用户产生太大的影响(可查看下文中session_encode()函数的例子)。一般的使用方法是两个函数结合起来使用,用来销毁所有的session:

<?php
session_start();
$test = "hello";
session_register("test");
echo $_SESSION["test"];
session_unset();
session_destroy();
?>

session_write_close()函数的作用是终止由session_start()函数开启的session可写入状态。手册里面说这个函数不是非常必要的,因为session会在页面载入完成以后自动结束,但是有时候还会使用到的。session_commit()函数的作用和session_write_close()函数完全一样。

session_module_name()函数的作用是取得或者设置一个session的储存形式,默认是files,即在服务器端使用文件来储存session,如果需要使用数据库等方式来储存session,才有改变这个函数的必要。

<?php
echo session_module_name();
// 显示 files
?>

session_set_save_handler()函数的作用是方便自定义的设置session在服务器端的相关操作。使用格式如下:

<?php
function open($save_path, $session_name)
{
//初始化
}
 
function close()
{
//关闭操作
}
 
function read($id)
{
//读取操作
}
 
function write($id, $sess_data)
{
//写入操作
}
 
function destroy($id)
{
//销毁操作
}
 
function gc($maxlifetime)
{
//垃圾回收
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
?>

session_save_path()函数的作用是设置或者取得一个session在服务器短的保存路径。

<?php
echo session_save_path();
// 显示 c:/tmp 或者 /var/lib/php5 什么的
?>

ession_cache_limiter()函数的作用是设置或者获取session缓存的类型。session_cache_expire()函数的作用是设置或者获取session过期的时间。ession_cache_limiter()函数有5种类型可供选择:none nocache private private_no_expire public,各种类型的差别这里跳过。

<?php
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
 
session_cache_expire(30);
$cache_expire = session_cache_expire();
 
session_start();
 
echo "The cache limiter is now set to $cache_limiter<br />";
echo "The cached session pages expire after $cache_expire minutes";
?>

session_encode()函数的作用是序列化当前session中的所有数据,session_decode()函数的作用是将被序列化的session数据还原。

<?php
session_start();
$_SESSION['login_ok'] = true;
$_SESSION['nome'] = 'sica';
$_SESSION['inteiro'] = 34;
 
$string = session_encode();
echo $string;
//显示 test|s:5:"hello";login_ok|b:1;nome|s:4:"sica";inteiro|i:34;
 
session_unset();
//销毁了,注意这里不能用session_destroy();
 
session_decode($string);
 
print_r($_SESSION);
/* 显示
Array
(
    [login_ok] => 1
    [nome] => sica
    [inteiro] => 34
)
*/

?>

session_get_cookie_params()函数的作用是获取session cookie的相关数据的参数。(session cookie其实就是和session有关的那个cookie)session_set_cookie_params()函数的作用是设置session cookie的相关数据的参数。这些参数可以在php.ini中找到,这里跳过。

<?php
print_r(session_get_cookie_params());
/* 或许显示
Array
(
    [lifetime] => 0
    [path] => /
    [domain] =>
    [secure] =>
    [httponly] =>
)
*/

?>

《中国电信携114搜索重洗网络搜索市场格局》VS《上海电信DNS劫持事件[含技术分析]》

Friday, May 11th, 2007