2023-01-17 07:14:54 发布人:hao333 阅读( 7562)
PHP中session详解 综述 Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。
php session Session的详细概述是指用户浏览网站时,从进入网站到关闭浏览器的时间,即用户浏览网站所花费的时间。从上面的定义我们可以看出,Session实际上是一个具体的时间概念。一般来说,网站上某个页面的变量(指服务器端变量,下同)是不能在下一个页面使用的,用session很容易做到。在会话中注册的变量可以用作全局变量。这样,我们可以使用会话进行用户认证、程序状态记录和页面之间的参数传递。PHP3版本3中session是如何实现的?Php3本身并没有实现session功能,所以我们要通过其他方法来实现,最著名的就是phplib。phplib最基本的功能包括用户认证、会话管理、权限和数据库抽象。下面来说说如何用phplib实现session。1.首先安装phplib(环境为win 2000 PHP 3 . 0 . 16 Apache 1 . 3 . 12 phplib 7.2c MySQL 3 . 23 . 21 for win32)。首先,用一个‘PHP’目录解锁phplib,并将这个目录复制到Apache的安装目录。例如,如果Apache安装在d:\Apache目录中,则将' php '目录复制到d:\Apache,将phplib目录的pages目录(不包括目录本身)中的文件和目录复制到d:\Apache\htdocs。phplib的类库需要根据系统进行初始化,local.inc文件可能需要修改,里面包含了一些基本参数,可以根据自己机器的实际情况进行修改。把文件d:\Apache\php\prepend.php中的一个程序改成这样:if(!isset($_PHPLIB)或!is _ array($ _ PHPLIB)){ $ _ PHPLIB[' libdir ']=' d:/Apache/PHP/'//将php目录的路径放在phplib } modify d:\ Apache \ PHP \ local . Inc file:classdb _ examples 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内置名(ses)。这些内置名称都是在local.inc中定义的因为phplib使用Cookies保存状态信息,所以在页面内容输出到浏览器之前必须调用page_open()函数。php脚本应该以page_close()结束,它会将相关的状态数据写回数据库,否则变量会丢失。3.具体用途。注册变量后,您可以在后续页面中使用它,直到会话结束。方法:<?PHP $ sess-> register(' varname ');>注意,这里的varname不是变量值,而是变量名。可以先指定变量名,然后再赋值。您可以更改某个页面中某个变量的值,后续页面在访问该变量时将获得更改后的值。变量的类型多种多样,可以是字符串、数字或数组。比如:第1页:<?PHP page _ open(array(' sess '=> ' Test _ Session '));$sess->注册(' welcome ');//注册变量$welcome。注意,你不需要添加$ $welcome='你好,PHP世界!'……page _ close();>第2页:<?PHP page _ open();//启动会话echo $ welcome//显示第一页中定义的$ welcome page _ close();//保存状态信息?>注册一个变量后,当页面最终调用page_close()函数时,每个会话变量都会被写回数据库。
如果忘记调用page_close()函数,变量将不会被写回数据库,这将产生不可预知的后果。当变量被使用并且不再需要时,可以调用下面的函数来删除变量:<?PHP page _ open(array(' sess '=> ' Test _ Session '));……$ sess-> unregister(' variable _ name ');……page _ close();>在PHP4版本中session是如何实现的?php4的Session也是依靠cookies保存session id,依靠文件系统保存变量(默认),所以它的session变量不能保存对象。当然,您也可以将会话保存在数据库中。php4中有很多与session相关的函数(详见php.ini配置)。通常我们只需要调用三个函数:sesssion _ start(),session_register()和session_is_registered()。在每个需要session的页面的开头调用session_start()函数,例如:<?session_start()。>
<?$welcome='你好,世界!'session _ register(' welcome ');//注册$welcome变量。注意没有$符号if(session _ is _ registered(' welcome ')//检查$welcome变量是否注册。“echo”欢迎变量已经注册!”;Else echo '欢迎变量尚未注册!'> 我们需要扩展六个函数来定制PHP 4中的会话处理:sess _ open ($ sess _ path,$ session _ name);会话处理程序调用该函数进行初始化。参数$sess_path对应php.ini文件中的session.save_path选项,参数$session_name对应php.ini. sess_close()中的session.name选项;当页面执行完毕,需要关闭会话处理程序时,这个函数被称为sess _ read($ key);当会话处理程序读取指定的会话密钥值($key)时,该函数检索并返回标识为$key的会话数据。(注:序列化是一种在程序结束或需要时将变量或对象保存在文件中,然后在程序下次运行或需要时调用到内存中的技术,与只保存数据的方法不同。)sess_write($key,$ val);当会话处理程序需要保存数据时,调用这个函数,这通常发生在程序结束时。它负责将数据保存到下次可以被sess_read($key)函数检索到的地方。sess _ destroy($ key);这个函数需要销毁会话。它负责删除会话和清理环境。sess _ GC($ max lifetime);这个函数负责清理碎片。在这种情况下,它负责删除过期的会话数据。会话处理程序偶尔会调用它们。自定义程序可以用mysql数据库或DBM文件保存会话数据,视具体情况而定。如果使用mysql做支持,需要以下步骤:首先在mysql中创建sessions数据库,创建sessions表:mysql >创建数据库会话;mysql >在会话上授予select、insert、update、delete。* TO phpsession@localhost ->由' phpsession '标识;mysql >创建表会话(--> 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/*数据库主机名*/$ sessions _ dbname=' sessions '/*数据库名称*/$ SESS _ DBUSER=' PHP session '/*数据库用户名*/$ SESS _ db pass=' PHP session '/*数据库密码*/$ SESS _ DBH=“”;$ SESS _ LIFE=get _ CFG _ var(' session . GC _ max lifetime ');…//自定义函数session _ set _ save _ handler(' sess _ open '' sess _ close '' sess _ read '' sess _ write '' sess _ destroy '' sess _ GC ');>使用dbm文件时自定义连接相关阅读
RelatedReading猜你喜欢
Guessyoulike