PHP回话管理
一、session
1.为什么要使用session
http协议是一种无状态的协议,只有当用户发送请求时,服务器端才会做出响应,因此客户端和服务端之间是分散的,而且在服务器响应请求以后,服务器端也不能很用户保持联系,两者就会无法进行数据交互。
例如,如果用户登录后,在各个网页之间进行跳转时,服务器端是无法识别用户的。
session的引入就为较为完美的解决了这个难题;当用户访问某个服务器端的时候,session机制会随机的产生一个具有唯一性的sessionID从而去唯一的表示某个用户,确保session的安全性,在这过程中,
可以对session对象进行数据存储与获取,实现服务器端和客户端之间的交互,直到用户关闭浏览器的时候,session才会完成一次的生命周期。
2.session的配置
session的配置可以通过打开php.ini进行相关配置,这里不够多的赘述。
3.session的基本操作
①.session的启动
session_start(void);
当要使用session的时候可以在其前面添加这个函数,就可以启动session了。
②.sessionID的获取
session_id([string id])
其中的id不是必须的,如果填入id,则当前用户的sessionID就是id,若没有填写则默认获取当前用户的sessionID,具有唯一性
例如:
1 <?php 2 session_start();//启动session 3 echo '当前的sessionID是'.session_id();//输出当前的sessionID 4 session_id('12345'); 5 echo '当前的sessionID是'.session_id(); 6 ?>
③.session的存取
1.存取某个数值
1 <?php 2 $_SESSION['username']='dragon'; 3 $username=$_SESSION['username']; 4 echo $username; 5 ?>
2.存取数组
1 <?php 2 session_start(); 3 $array=array('1','2','3','4');//声明一个数组 4 $_SESSION['num']=$array;//存入数组 5 //通过foreach获取数组session 6 foreach ($_SESSION['num'] as $key => $value){ 7 echo '$_SESSION['.'''.$key.'''.']='.$value.'<br/>'; 8 } 9 ?>
当然如果想显示某列的内容就可以使用如下的代码:
1 ?php 2 session_start(); 3 echo $_SESSION['num'][3];//获得下标为3的数组的值 4 ?>
3.存取对象
1 <?php 2 class User{ 3 private $username; 4 private $password; 5 public function __construct($username,$password){ 6 $this->username=$username; 7 $this->password=$password; 8 } 9 //以下省略get和set方法 10 } 11 ?> 12 <?php 13 session_start(); 14 //创建一个User对象,并初始化它,将其存储在session中 15 $_SESSION['user']=new User('dragon', '123456'); 16 //获取session 17 $user=$_SESSION['user']; 18 $username=$user->getUsername(); 19 $password=$user->getPassword(); 20 echo $username.' '.$password; 21 ?>
④.session的销毁
unset($_SESSION[key]) // 用于删除指定变量 session_unset() // 用于清除存储在当前会话中的所有变量 session_destroy() // 从存储机制中完全删除会话
二、cookie
1.定义
在http协议下,服务器或者脚本可以维护客户工作站上信息的一种方式
2.工作原理
首先,服务器端在响应中利用Set-Cookie header创建一个Cookie,然后浏览器在它的请求中通过Cookie header,并将它返回至服务器,从而完成浏览器的验证。
3.cookie的基本操作
①.cookie的创建
setcookie(string name[,string value,int expire,string path,string domain,int secure]); name:必选参数,指定cookie的名称 value:可选参数,指定cookie的值,保存在客户端,不应该为敏感和机密的数据 expire:可选参数,表示cookie的有效截止时间,该参数必须是整型的,例如:time()+5*60表示 的是该cookie将在5分钟后失效,若没有设置,cookie会在关闭浏览器时失效 path:可选参数,表示cookie的有效路径,默认为当前路径;例如该参数为 “/”,那么表示在整个domain内有效domain:可选参数,表示cookie的有效域名。例如,要使cookie 能在如www.example.com的域名下的所有子域都有效的话,该参数设置为.example.com。虽然是可选 的,但是加上可以兼容更多的浏览器。 secure:可选参数,表示cookie时候仅通过安全的HTTPS连接传送,默认值为false。当设置成true时, cookie仅在安全的连接中 被设置。 也可以创建一个cookie去存放数组,例如 <?php setcookie('cookie[three]','cookiethree'); setcookie('cookie[two]','cookietwo'); setcookie('cookie[one]','cookieone'); ?>
②.cookie的获取
一般的获取 $_COOKIE['key']
数组的获取:
1 <?php 2 if(isset($_COOKIE['cookie'])){ 3 foreach($_COOKIE['cookie'] as $key => $value){ 4 echo '$key : $value<br/>'; 5 } 6 } 7 ?>
③.cookie的有效期
cookie是具有生命周期的,一般默认为关闭浏览器,则cookie失效,但是也可以通过设置其有效期来表示去失效的时间,例如:
<?php //设置cookie为一个小时失效 setcookie('name','value',time()+60*60); ?>
但如果要指定某年某月某日失效的话,就可以使用以下函数
int mktime([int hour,int minute,int second,int month,int day,int year,int is_dest])
④.cookie的删除
setcookie('name',');
如果前面设置了不同的参数,此时也要全部填入,确保可以正确的删除掉想要的cookie。
三、cookie与session的区别
1.cookie保存在客户端,客户端知道其中的意思;session保存在服务器端,客户端不知道其中的意思。
2.cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相访问不到;session不区分路径,一位用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。
3.cookie没有session安全
4.session需要借助cookie才能正常工作,如果客户端完全禁止cookie,则session将完全失效。
5.一般情况下,session适用于单次访问的情况,例如网站银行,当用户异常断线或者超时未操作等,session会根据时间自动中断连接;而cookie则适合于更加持久的数据存储,例如论坛的访问。