yii--session 和 php中的 session

 

                一.纯php中的session

1.Session的作用

     PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。session变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。

 

2.Session的工作机制

  为每一个访问者创建一个唯一的id(UID),并基于这个UID来存储变量。UID存储于cookie中,亦或通过URL进行传导

 

3.Session存在的意义

  因特网上,存在一个问题:服务器不知道你是谁以及你在做什么,这是由于HTTP地址不能维持状态,通过在服务器上存储用户信息以便随后使用,session用来解决这个问题,会话信息是临时的,用户离开网站之后就会被删除,想要长期使用就要把session存储在数据库

 

4.开始Session

  在您把用户信息存储在PHP session之前,先要启动会话。<?php session_start();?>,必须位于<html>标签之前

上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时为用户会话分配一个UID

 

5.存储Session变量

  存储和取回session变量的正确方法是使用PHP $_SESSION变量:$_SESSION['views']=1;来进行设置值,并且可以通过$_SESSION['views']来进行取值

  isset()检测是否已经设置了$_SESSION

6.终结Session

  (1)unset来进行释放指定的session变量

  (2)session_destroy() 来彻底终结session,将会重置session,您将会失去所有已经存储的session

 

                二.YII中的Session

1.YII将session和cookie封装成对象来增加一些功能,可以通过面向对象的方式访问他们

2.默认通过yii\web\Session实例的session应用组件来进行访问sessions。例:$session=Yii::$app->session;

  1.检查session是否开始: $session->isActive

  2.开始session:         $session->open();

  3.关闭session:      $session->close();

  4.销毁session:        $session->destory(); 销毁session所有的已注册的数据

 注意:多次调用open()和close()函数并不会产生错误,因为内部方法会先检查session是否已经开启

 

2.访问Session数据

  (1)获取session变量

  $language=$session->get('language');

  $language=$session['language'];

  $language=isset($_SESSION['language'])?$SESSION['language']:null;

  (2)设置session变量

  $session->set('language','en-US');

  $session['language']='en-US';

  $_SESSION['language']='en-US';

  (3)删除session变量

  unset($session['language']);

  unset($_SESSION['language']);

  $session->remove('language');

 (4)检查session是否存在

  isset($session['language'])

  isset($_SESSION['language'])

  $session->has('language');

 (5)session的遍历

  foreach($session as $name  => $value)

  foreach($_SESSION as $name  => $value)

  注意:当session组件访问session数据的时候,如果session没有开启那么就会自动开启,这和$_SESSION不同,$_SESSION要求先执行session_start().

 

  (6)session数据为数组时,session组件会限制你直接修改数据中的单元项,但是可以访问session数据数组

  例如:$session = Yii::$app->session;

  $echo $session['captcha']['number'];

  $session['captcha']['number']=5; 这句代码不会被执行

  $session['captcha'] = [

    'number' => 5,

  ];    这样去进行修改就可以修改成功

   但是不要担心,可以使用下面一个变通的方法来解决问题。

  (1)$_SESSION['captcha']['number'] = 5;

  (2)先获取session数据到一个数组,修改数组的值,然后保存数组到session中

    $captcha = $session['captcha'];

      $captcha['number'] = 5;

    $session['captcha'] = $captcha; 

 (3)使用带通用前缀的键来存储数组,(最简易这个写法,可读性高)

      $session['captcha.number'] = 5;

   (4)使用ArrayObject数组来进行代替数组

  $session['captcha'] = new \ArrayObject;

 

3.Session存储·

  yii\web\session默认存储session文件到服务器上,但是session提供了以下类来实现不同的存储。

  yii\web\DbSession 表示session存储在数据表中

  yii\web\CacheSession 表示session数据存储到缓存里,缓存和配置中的缓存组件有关

  yii\redis\Session 表示的是session存储在到以redis为存储媒介中

  yii\mongodb\Session 表示的是存储到Mongodb中

   所有的session采用相同的api,因此对存储介质进行转换的时候不需要进行改变代码

注意注意:当使用自定义的session存储介质的时候,必须保证yii\web\Session::open()开启,因为要在该方法中注册自定义的session存储处理器

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值