PHP会话初阶

来源:互联网 发布:java textfile类 编辑:程序博客网 时间:2024/06/04 13:05

                                                                                                                                           Php之会话控制

(一)cookie的介绍

1、           大多数浏览器都支持cookie,当然这些浏览器也可以手动关闭cookie。比如windows下的,你也许就可以在c:\Document and Settings\用户名\Cookie 下面找到。

2、           Php内建的setCookie()函数建立一个cookie非常简单。语法格式:bool setcookie(string $name,[string $value,int$expire,string $path,string $domain,string $secure]),其中除了  name参 外,其他都是非必须的,而我们经常使用的只有前三个参数。举个例子: <?php

Setcookie(“username”,”skygao”,time()+60*60*24*7);?>这就建立起 名为username的值为skygao,生存周期是一周的cookie,如果为设定生存时间,浏览器关闭,cookies就木有了

3、           从PHP5以后,任何从客户端发送过来的COOKIE信息,都自动保存在$_COOKIE全局数直接应用就可以了,在设置cookies的脚本中,第一次读取他的信息并不回生效,必须刷新或到下一个页面才可以看到其COOKIE值。

4、           数组形态的COOKIE,可以这样来设定啊。<?php setcookie(“user[username]”, “skygao”);  

Setcookie(“user[password]”,md5(“123456”)); setcookie(“user[email]”,”skygao@lambbb.net”);?>

读取的话可以下面这样<?php foreach($_cookie[‘user’] as $key=>$value){

Echo $key.”:”.$value.”\n”;

}

?>

5,然后就是删除cookie了,比如用户注销,有两种办法,一是:setcookie(“yaoshanchude mingzi”);  二是:setcookie(“要删除的名字”, ””,time()-1); 第一种没设置时间,所以默认浏览器关闭就会删除这个cookie,第二种就是把有效期时间设置提前,这肯定已经超时了,所以就达到删除的目的。

(二) SESSION

1、所说cookie已经可以让无状态的HTTP的缺点被弥补了,但是,有些人说因为安全,他会把浏览器的COOKIE禁用,那怎么办呢?这个时候就可以用SESSION了。SESSION的配置挺多的,就说三个吧,首先介绍sesssion.save_hanlder,SESSION的这些配置都在php.ini里哈,sesssion.save_hanlder有三个可选值,files,user,sqlite,memcache其中这些东西顾名思义嘛,files就是把会话存在服务器一个你自己自定的目录下,而sqlite就是用sqlite数据库嘛,memcahce这是个就是用一个服务器的缓存系统存session,user就是你自定义的存取方式,忘了说了,如果你不改下面,下面直接是files则这个就是用cookie存会话。如果你用自己定义的方式或者mysqkl存会话的话,你就要选择user

2、session的申明和使用(默认的COOKIE存取),首先启动session用bool session(void)函数,这个函数有两个作用,一是开始一个会话,二是返回已经存在的会话,这个机制呢是这样的,首先你第一次访问网站时,session_start()函数集会穿件一个唯一的SESSION ID,并且自动通过HTTP的相应,将这个SESSION ID保存在客户端的COOKIE里,同时也会在服务器端创建一个以这个SEESION ID命名的文件,用于保存这个用户的会话信息,当同一个用户再次访问这个网站时,这个时候客户端存的SESSION ID就会发送到服务器,这个时候这个函数就不是重新分配一个新的SESSION ID了,而是在服务器里去找与这个SESSIONID同名的文件,独读出数据来使用。

3、注册一个会话变量和读取SESSION,直接上代码:

<?php session_start();

$_session[‘username’]=”dafanzi”;

$_session[‘login’]=1;

   创建成功后,就会自动保存在一个文件下,这个文件是你在php.ini里的session.save_path 指定的目录,文件名是以这个会话的sessionID命名的,这个文件直接打开就是了,格式是变量名|类型:长度:值;

5、           注销变量与销毁session,直接给一些代码。难得啰嗦

<?php

session_start();     // 开启sesion并初始化

$_session=array();  /*删除所有session变量,也可以用unset($_SESSION[‘session name’])一个个删除,但你千万不要unset($_session),你把这个系统自带的全局变量删了,以后就不能用了*/

If(isset($_cookie[session_name()])){      //session_name()会返回这个会话的SESSION用的cookies名

Setcookie(session_name(),”,time-1);     // 删除客户端保存的sessionID

}

Session_destroy()

?>                   //删除服务器端的文件

 

 

 

( 三)传递sessionID

1、        首先说明,  SESSION的传递有两种方式,第一种是基于COOKIE的方式传递SESSION,这种方法挺好的,但还是有些人会把自己带电脑的浏览器的COOKIE屏蔽了,就用不成了。第二种是通过URL进行参数传递,前面的就是讲得用COOKIE,所以不再累述了,下面讲一下用URL吧。

2、        用URL,其实就是在你要链接另一个网页时,把SESSIONID放在URL里,传统的办法是<?php

Session_start();

echo ‘<ahref=”dafanzi.php?’.sesion_name.’=’.session_id.’”></a>’
;

?> 现在的方法就是直接用SID常量,如果系统判断没有发送COOKIE过来,SID就会为 session_name=session_id,否则为空字符串。比如下面的代码:<?php

Session_start();

$_session[‘username’]=”admin”;

Echo “sessionid:”.session_id().”<br/>”;

//上面的那个session_id()会返回你的SESSION ID

?>

<a href=”test2.php?<php echoSID ?>”>通过URL传递SESSSION ID</a>

(四)session的自动回收机制

1、当你的php.ini里的session.cookie_lifetime=0或者设置另一个有限时间,到达设置的这个时间后你保存在客户端中的COOKIE里的SESSIONID就会自动消失,但你服务器里的SESSION文件就没用了,成了垃圾,对于这样的一些session文件,系统有自动清理机制。

2、原理就是服务器里每个保存的SESSION文件都会有文件修改时间,“垃圾回收程序”就是根据这个这个修改时间来删除文件的。通过在php.ini里设置session.gc_maxlifetime选项,制定一个以秒为单位的时间,比如设置成1440秒,垃圾回收程序就会在所有服务器端的SESSION文件里,一一排除,如果有修改时间局里当前系统的时间有大于1440秒的,就将其删除。

3、但是一个网站有很多脚本,每个脚本也许都开启会话(session_tart()),而且每个网站又会同时被多个用户同时访问,所以有可能“垃圾回收程序“会被无数次启用,但这样很不合理。所以可以在php.ini里修改session.gc_probability和session.gc_divisor,比如你设置第一个选项为1,第二个选项为100,那么这个概率就为1/100,即sesasion_start()被调用100次,才会有一次可能启动”垃圾回收程序“

0 0
原创粉丝点击