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则适合于更加持久的数据存储,例如论坛的访问。

 

posted on 2018-08-02 17:00  seizemiss  阅读(181)  评论(0编辑  收藏  举报