在使用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;