PHP用MYSQL存SESSION数据测试代码

在使用session时一般也就是以下几个步骤:

1.启动session,使用session_start()函数;

如果使用的状态是cookie base的session传递方式,之后程式的开头都必须使用session_start()函数,而且一定要放在页面开头,之前不能有任何结果输出(比如:echo输出或者html)

如果在php.ini的设置中session.use_trans_sid = 1,点击页面上的连接可以正常传值到第二页,网址会自动加上(举例)[?PHPSESSID=8234c3f661bd1eac450c23d5650e0881]

如果在php.ini的设置中session.use_trans_sid = 0,需要使用URL的方式传递session id,[SID]是php在启动session后自动产生的变量,可以在URL中使用,如:第二页(URLs)

传递过来的第二页也要先启动session,调用session_start()函数。

2.注册session,不推荐使用session_register()函数,使用$_SESSION[]来注册;

需要先调用session_start()函数,使用$_SESSION[”session_name”] = “session_value”;的方式注册session

3.清楚session,使用session_destroy()函数

结束session,同时删除session文件,需要事先调用过session_start()

4.取得session的id,使用session_id()函数

5.查看session是否已被注册,使用session_is_registered()函数

下面再将跟session有关的函数罗列一下,用到自己查php手册即可

session_cache_expire ;得到目前cache的存活时间

session_cache_limiter ;得到或设计目前cache的限制器

session_decode ;从某一字符串进行session资料的解码

session_destroy ;注销一个session

session_encode ;把session字符串进行编码

session_id ;得到或设定目前的session id

session_is_registered ;检测session是否已经建立

session_module_name ;取得或设定目前session的组能

session_name ;取得或设定目前session的名称(预设:PHPSESSID)

session_regenerate_id ;更新当前的session id

session_register ;注册session

session_save_path ;得到或设定目前session文件的存储路径

session_start ;启动session

session_unregister ;注销某个指定的session

session_unset ;释放所有session里的资料

session_write_close ;写入session资料并结束session功能

session_set_save_handler;设定使用者session的存储方式

session_get_cookie_params ;取得session在cookie的参数

session_set_cookie_params ;设定session在cookie的参数

/* SQL
    CREATE TABLE `sess` (
    `sesskey` varchar(32) NOT NULL default "",
    `expiry` bigint(20) NOT NULL default '0',
    `data` longtext NOT NULL,
    PRIMARY KEY (`sesskey`),
    KEY `expiry` (`expiry`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
sesskey 为 SESSION ID,expiry 为 SESSION 过期时间,data 用于保存 SESSION 数据。
默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定义 SESSION 各个操作的处理函数。PHP 提供了session_set_save_handle()函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 session.save_handler 改成 user。

接下来着重讲一下 session_set_save_handle() 函数,此函数有六个参数:

session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )

各个参数为各项操作的函数名,这些操作依次是:打开、关闭、读取、写入、销毁、垃圾回收。PHP 手册中有详细的例子,在这里我们使用 OO 的方式来实现这些操作,详细代码如下:
*/
    //类定义
    class My_Sess
    {
    function init()
    {
    $domain = '.zhank.com';
    //不使用 GET/POST 变量方式
    ini_set('session.use_trans_sid', 0);
    //设置垃圾回收最大生存时间MY_SESS_TIME
    ini_set('session.gc_maxlifetime', 3600);
    //使用 COOKIE 保存 SESSION ID 的方式
    ini_set('session.use_cookies', 1);
    ini_set('session.cookie_path', '/');
    //多主机共享保存 SESSION ID 的 COOKIE
    ini_set('session.cookie_domain', $domain);
    //将 session.save_handler 设置为 user,而不是默认的 files
    session_module_name('user');
    //定义 SESSION 各项操作所对应的方法名:
    session_set_save_handler(
    array('My_Sess', 'open'), //对应于静态方法 My_Sess::open(),下同。
    array('My_Sess', 'close'),
    array('My_Sess', 'read'),
    array('My_Sess', 'write'),
    array('My_Sess', 'destroy'),
    array('My_Sess', 'gc')
    );
    } //end function
    function open($save_path, $session_name) {
    return true;
    } //end function
    function close() {
    global $MY_SESS_CONN;
    if ($MY_SESS_CONN) { //关闭数据库连接
    $MY_SESS_CONN->Close();
    }
    return true;
    } //end function
    function read($sesskey) {
    global $MY_SESS_CONN;
    $sql = 'SELECT data FROM sess WHERE sesskey=' . $MY_SESS_CONN->qstr($sesskey) . ' AND expiry>=' . time();
    $rs =& $MY_SESS_CONN->Execute($sql);
    if ($rs) {
    if ($rs->EOF) {
    return ;
    } else { //读取到对应于 SESSION ID 的 SESSION 数据
    $v = $rs->fields[0];
    $rs->Close();
    return $v;
    } //end if
    } //end if
    return ;
    } //end function
    function write($sesskey, $data) {
    global $MY_SESS_CONN;
    $qkey = $MY_SESS_CONN->qstr($sesskey);
	$qkey = str_replace("'","",$qkey);
	//echo $qkey;
    $expiry = time() + 3600; //设置过期时间My_SESS_TIME
    //写入 SESSION
    $arr = array(
    'sesskey' => $qkey,
    'expiry' => $expiry,
    'data' => $data);
    $MY_SESS_CONN->Replace('sess', $arr, 'sesskey', $autoQuote = true);
    return true;
    } //end function
    function destroy($sesskey) {
    global $MY_SESS_CONN;
    $sql = 'DELETE FROM sess WHERE sesskey=' . $MY_SESS_CONN->qstr($sesskey);
    $rs =& $MY_SESS_CONN->Execute($sql);
    return true;
    } //end function
    function gc($maxlifetime = null) {
    global $MY_SESS_CONN;
    $sql = 'DELETE FROM sess WHERE expiry. time()';
    $MY_SESS_CONN->Execute($sql);
    //由于经常性的对表 sess 做删除操作,容易产生碎片,
    //所以在垃圾回收中对该表进行优化操作。
    $sql = 'OPTIMIZE TABLE sess';
    $MY_SESS_CONN->Execute($sql);
    return true;
    } //end function
    }
    //使用 ADOdb 作为数据库抽象层。
    require_once('adodb5/adodb.inc.php');
    //数据库配置项,可放入配置文件中(如:config.inc.php)。
    $db_type = 'mysql';
    $db_host = 'localhost';
    $db_user = 'root';
    $db_pass = '123123';
    $db_name = 'test2';
    //创建数据库连接,这是一个全局变量。
    $GLOBALS['MY_SESS_CONN'] =& ADONewConnection($db_type);
    $GLOBALS['MY_SESS_CONN']->Connect( $db_host, $db_user, $db_pass, $db_name);
    //初始化 SESSION 设置,必须在 session_start() 之前运行!!
    My_Sess::init();
	//session_start();
$sesskey="163";
$data="111ererer";
My_Sess::open('/', $sesskey);
My_Sess::write($sesskey, $data);

$aaa= My_Sess::read($sesskey);
echo $aaa;

© 版权声明
THE END
喜欢就支持以下吧
点赞0 分享