php中sessionget,PHP中session详解

综述

Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。

一般来说,在网站上某一个页面中的变量(指服务器端变量,下同)是不能在下一页中用的,有了session就好办了。session中注册的变量可以作为全局变量使用。这样我们就可以将session用于用户身份认证,程序状态记录,页面之间参数传递。

在PHP3版本中是如何实现session的?

php3本身是没有实现session功能的,我们只有用其他的方法来实现,这其中最有名的要算phplib了。phplib最基本的功能包括用户认证、Session管理、权限及数据库的抽象化。下面我们就讲述一下如何用phplib实现session。

1、首先安装phplib(环境为win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32)

首先将phplib解开,里面有一个"php"目录,将这个目录拷贝到Apache的安装目录下。例如:Apache安装在d:Apache 目录下,那么就将"php"目录拷贝到d:Apache,并将phplib目录的pages目录下(不包括目录本身)的文件和目录一起拷贝到d:Apachehtdocs下。

phplib的类库需要根据系统进行初始化,可能需要修改local.inc文件,其中包含着一些基本参数,可以根据自己机器的实际情况来进行修改。

将d:Apachephpprepend.php文件中的一段程序改为如下样子:

if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {

$_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目录的路径

}

修改d:Apachephplocal.inc文件:

class DB_Example extends DB_Sql {

var $Host = "localhost"; //mysql数据库所在主机名

var $Database = "test"; //数据库名

var $User = "root"; //数据库用户名

var $Password = "1234567"; //数据库用户密码

}

最后根据phplib目录下的stuff子目录中的create_database.mysql文件生成初始表。

由于每一个使用phplib的页面首先必须可以找到运行phplib所必需的类库文件,我们可以在php.ini中设置auto_prepend变量来支持,phplib中包含一个prepend.php文件,并将auto_prepend指定为"d:/Apache/php/prepend.php"(带引号)后,各页面就会自动包含phplib类库,我们还可以将phplib类库所在目录加进include变量中,以便可以找到这些文件。

2、调用page_open()函数

在每一个使用phplib的页面中,必须首先调用page_open函数进行初始化,例如:

register( "varname"); ?>

注意,这里的varname不是变量值,而是变量名,可以先指定变量名,随后再赋值。你在某个页面中可以改变变量的值,随后的页面访问该变量时会得到改变后的值。变量的类型是多样的,可以是一个字符串,一个数字,一个数组。举例来说明:

第一页:

$welcome="hello world !";

session_register("welcome");//注册$welcome变量,注意没有$符号

if(session_is_registered("welcome"))//检查$welcome变量是否注册

echo "welcome变量已经注册了!";

else

echo "welcome变量还没有注册!";

?>

php4中session处理的定制

我们需要扩充6个函数:

sess_open($sess_path, $session_name);

这个函数被session处理程序调用来作初始化工作。

参数$sess_path对应php.ini文件中的session.save_path选项

参数$session_name对应php.ini中的session.name 选项。

sess_close();

这个函数在页面结束执行并且session处理程序需要关闭时被调用

sess_read($key);

这个函数在session处理程序读取指定session键值($key)时,检索并返回标识为$key的session数据.(注意:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于只保存数据的方法。)

sess_write($key, $val);

这个函数据在session处理程序需要将数据保存时调用,这种情况经常在程序结束时发生。它负责将数据保存在下次能用sess_read($key)函数检索的地方。

sess_destroy($key);

这个函数在需要消毁session时。它负责删除session并且清除环境。

sess_gc($maxlifetime);

这个函数负责清理碎片。在这种情况下,它负责删除过时的session数据。session处理程序会偶尔调用它们。

定制程序可以用mysql数据库或DBM文件保存session数据,视具体的情况而定。如果使用mysql作支持,那还需要进行以下的步骤:

首先在mysql中创建一个sessions数据库,并且创建一个sessions表:

mysql> CREATE DATABASE sessions;

mysql> GRANT select, insert, update, delete ON sessions.* TO phpsession@localhost

-> IDENTIFIED BY 'phpsession';

mysql> CREATE TABLE sessions (

-> sesskey char(32) not null,

-> expiry int(11) unsigned not null,

-> value text not null,

-> PRIMARY KEY (sesskey)

-> );

下一步,修改session_mysql.php文件的$SESS_DB* 变量使其匹配你机器上的数据库设置:

$SESS_DBHOST = "localhost"; /* 数据库主机名 */

$SESS_DBNAME = "sessions"; /* 数据库名 */

$SESS_DBUSER = "phpsession"; /* 数据库用户名 */

$SESS_DBPASS = "phpsession"; /* 数据库密码 */

$SESS_DBH = "";

$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

……//定制函数

session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");

?>

定制使用dbm文件时的接口 :

$SESS_DBM = "";

$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

……//定制函数

session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");

?>

session定制的测试代码:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14883374/viewspace-409963/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值