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

<?

$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文件时的接

session在PHP中的用法,PHP中session使用方法详解相关推荐

  1. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  2. mysql小计_Mysql必读用SQL实现统计报表中的小计与合计的方法详解

    <Mysql必读用SQL实现统计报表中的"小计"与"合计"的方法详解>要点: 本文介绍了Mysql必读用SQL实现统计报表中的"小计&qu ...

  3. new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解

    new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解 //获得年月日时分秒 //传入日期// ...

  4. python中backward_pytorch的梯度计算以及backward方法详解

    基础知识 tensors: tensor在pytorch里面是一个n维数组.我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度.在pytorch中一般叫做d ...

  5. java中form用法_SpringMVC表单标签使用详解

    在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需 ...

  6. chmod 赋权所有_Linux中利用sudo进行赋权的方法详解

    前言 学习怎么在保护 root 密码的安全性的同时,为可信用户赋予所管理的网络功能和特定服务的权限. 我最近写了一个简短的 Bash 程序来将 MP3 文件从一台网络主机的 USB 盘中拷贝到另一台网 ...

  7. mysql 合计 小计_用SQL实现统计报表中的小计与合计的方法详解

    本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下 客户提出需求,针对某一列分组加上小计,合计汇总.网上找了一 ...

  8. oracle 汉字替换空格,oracle中replace替换回车换行空格的方法详解

    本篇文章是对oracle中去掉回车换行空格的解决方法进行了详细的分析介绍,需要的朋友参考下 去除换行 update zhzl_address t set t.add_administration_nu ...

  9. java中onclick的用法_JavaScript onclick事件使用方法详解

    onclick是一个事件,当事件被触发时就会执行处理,onclick是一个处理鼠标点击的事件.本篇文章就给大家分享关于JavaScript中onclick事件的用法. 我们首先来看一下onclick事 ...

  10. python中dir用法_Python内置函数dir详解

    1.命令介绍 最近学习并使用了一个python的内置函数dir,首先help一下: >>> help(dir) Help on built-in function dir in mo ...

最新文章

  1. Internet设置-连接选项卡-局域网(LAN)设置 某些设置由系统管理员进行管理
  2. solr搭建分布式搜索引擎
  3. vue 动态添加class_前端开发:Vue项目实战-Music
  4. Java 关于类的专题
  5. linux mysql 6.0.4 启动_MySQL Connector/J 6.x jdbc.properties 配置, mysql-connector-java-6.0.4.jar 异常...
  6. 07-struts2提供的数据校验
  7. maven scala plugin 使用教程笔记之jvmArgs配置-D参数中使用.md
  8. 华为linux服务器系统安装,linux服务器系统安装
  9. Flightgear 编译
  10. SPSS详细图文教程:手把手教你配对样本t检验,
  11. linux查看md5值
  12. C++后台开发技术栈
  13. 企业微信第三方服务商应用开发及上架教程
  14. element ui实现抽屉效果_如何给element添加一个抽屉组件
  15. 24节气—霜降文案、海报 , 秋将去,降初霜。
  16. linux-xsell、xftp连接虚拟机
  17. 幼儿园班级信息管理系统
  18. 360公司开源Atlas快速上手安装配置
  19. 工欲善其事必先利其器,利用搜狗输入法设置代码片段
  20. Golang Http RoundTrip解析

热门文章

  1. [项目管理-32]:项目经理六阶段职业成长之路: 达克效应=>短板理论=>刻意练习=>长版板子理论=>精进=>布道
  2. Python爬取AES加密的m3u8视频流的小电影并转换成mp4
  3. 分享:详记一次MySQL千万级大表优化过程!
  4. 在服务器上用sendmail代发邮件
  5. 程序员的第一步,你走对了吗?
  6. 在线发货找不到CHINA POST AIRMAIL?
  7. 医学健康数据分析与挖掘(一)—— R语言实战
  8. 快速排序算法C语言实现
  9. Android Stdio 控制STM32开发板
  10. 原生table:表格table中thead固定,tbody超出高度出现滚动条