• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> PHP 开发 >> PHP接触 >> 详细内容
 

推荐文章

 
 

热点文章

  • PHP新手总结的PHP基础知识
  • 主流PHPBlog程序之2005
  • PHP高手之路
  • PHP比ASP优秀的七个理由
  • 新手遇到编程问题的解决方法
  • 致php初学者
  • 关于ZendOptimizer
  • PHP是一种没有前途的嵌入式脚本语
  • PHP开发中session应用详解
  • php和asp对象的等价关系
  • PHP在Web开发领域的优势
  • [转]PHP也可以當成ShellScript
 
 

相关文章

  • 结合AJAX进行PHP开发之入门
 
 

百度搜索

 
 

PHP开发中session应用详解

  • 阅览次数:
  • 文章来源: CP整理
  • 原文作者: 不祥
  • 整理日期: 2007-01-25
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

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:\Apache\htdocs下。

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

  将d:\Apache\PHP\prepend.PHP文件中的一段程序改为如下样子:


if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
  $_PHPLIB["libdir"] = "d:/Apache/PHP/"; //放PHPlib下PHP目录的路径
}


  修改d:\Apache\PHP\local.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函数进行初始化,例如:

<?PHP
  page_open(array("sess" => "Test_Session"));
?>


  数组变量(sess)用来初始化一些状态保存对象,这里应该注意:必须使用PHPlib内置名(sess),这些内置名是在local.inc中所定义的.。

  因为PHPlib使用了Cookies来保存状态信息,所以page_open()函数必须在页面内容输出到浏览器之前被调用。PHP脚本最后应以page_close()结束,这将会将有关状态数据写回到数据库中,否则变量会丢失。

  3、具体使用。

  注册一个变量后即可在随后的页面中使用它,直至session结束。方法:

  <?PHP $sess->register( "varname"); ?>

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

  第一页:

<?PHP
 page_open(array("sess" => "Test _Session"));
 $sess->register( "welcome"); //注册变量$welcome,注意不需要加$
 $welcome="Hello,PHP world!";
 ……
 page_close();
?>


  第二页:

<?PHP
 page_open();//开始session
 echo $welcome;//显示第一页中定义的$welcome
 page_close();//保存状态信息
?>


  注册完一个变量,当页面最后调用page_close()函数后,各个session变量会被写回到数据库中。如果忘记调用page_close()函数的话,变量就不会被写回数据库,这样将出现不可预知的后果。当变量被使用完毕,不再需要用到时,可以调用以下函数将变量删除:

<?PHP
 page_open(array("sess" => "Test _Session"));
 ……
 $sess->unregister( "variable_name");
 ……
 page_close();
?>


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

  PHP4的session也靠cookies保存session id,用文件系统保存变量(默认情况下),因此,它的session变量不能保存对象。当然也可以将session保存在数据库中。

  在PHP4中有关session的函数很多(详见PHP.ini配置一文),通常情况下我们只需要调用三个函数即可:sesssion_start()、session_register()、session_is_registered()。

  在需要用到session的每一页的最开始处调用session_start()函数, 例如:

<?session_start()?>
<HTML><body>
<?
 $welcome="hello world !";
 session_register("welcome");//注册$welcome变量,注意没有$符号
 if(session_is_registered("welcome"))//检查$welcome变量是否注册
  echo "welcome变量已经注册了!";
 else
  echo "welcome变量还没有注册!";
?>
</body></HTML>


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* 变量使其匹配你机器上的数据库设置:

上一篇:ASP抽取数据的执行效率
下一篇:比AcdSee功能还强大的图片处理、编辑软件,推荐下载!
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号