陈力:传智播客古代 珍宝币 泡泡龙游戏开发第45讲:PHP程序设计中的session技术

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第45讲:PHP程序设计中的session技术

    Session是服务器端技术,可以把各自的数据放在各自的session中。通过session_start();进行初始化后,如果创建、修改和删除session,如果理解服务器实现一个session为一个用户浏览器会话服务的。本文结合笔者多年贵阳网站建设实践经验进行分析。

    大家都在淘宝网上购买过商品,张三和李四他们购买的商品不一样,他们的购物车中的显示的商品也不一样,这是怎么实现的?
    另外一个问题,不同的用户登录网站后,不管该用户浏览该网站的哪个页面,都可显示登录人的名字,同样可以随时去查看自己的购物车中的商品。
这些都是通过session技术实现的。
一、session技术介绍
    Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
    当用户打开浏览器,访问某个网站操作session时(执行session_start()),服务器就会在服务器的磁盘为该浏览器分配一个保存session信息的文件,该文件被这个浏览器独自访问。这个session也可看做是一个数组,session数据默认存在时间为1440s(即24min),从~\php.ini 的[session]节可以配置。

软件设计,PHP教程,贵阳网站建设



二、session作用
1:网上商城中的购物车。
2:保存登录用户的信息。
3:将某些数据放入到Session中,供同一用户的各个页面使用。
4:防止用户非法登录到某个页面。

三、Session基本用法
1:初始化session。
session_start(); 
2:向session添加数据。
$_SESSION[‘key值’]=$val;
3:从session得到某个数据值。
$val=$_SESSION[‘key值’];
4:删除session关联的数据。
session_start();//初始化session
session_destory();//销毁和当前session关联的所有数据。
session_start() 函数前不能有任何输出,包括空行和空格。
     也可以通过php.ini 的  session.auto_start = 0 改成 0->1 来自动启用,这样就不需要在每个页面使用的,但是我们不推荐这样做,因为这样不能在session中保存对象了!
     $_SESSION[‘session名’]=$val ; $val 类型可以是基本数据类型,也可是array,或者对象。
session的值可以是对象。[ie测试不能在新的ie去访问上一个ie的session。需要向关闭前一个ie,否则测试不能成功]。除了生命周期这一项]
session中放置对象演示实例:
****Dog.php******
<?php 
 class Dog{
  private $name;
  private $color;
  private $age;
  public function set_name($name){
   $this->name=$name;
  }
  public function set_color($color){
   $this->color=$color;
  }
  public function set_age($age){
   $this->age=$age;
  }
  public function get_name(){
   return $this->name;
  }
  public function get_color(){
   return $this->color;
  }
  public function get_age($age){
   return $this->age;
  }
 }
?>
****session1.php 创建session()****
<?php 
 include_once('Dog.php');
 session_start();
 $_SESSION['bookname']="天龙八部";
 $_SESSION['writer']='金庸';
 $dog1=new Dog();
 $dog1->set_name('小黄');
 $dog1->set_color('红色');
 $_SESSION['mydog']=$dog1;
 echo '创建session成功';
?>
****session2.php(获取session)****
<?php
 include_once('Dog.php');
 //取出session
 session_start();
 $val=$_SESSION['bookname'];
(1)  $dog1=$_SESSION['mydog']; //session中的数据是取出对象,要申明一个和原类型一样的结构(类的定义信息)。否则会出错。
 echo 'val='.$val." name=".$dog1->get_name()." sessioni=".session_id();
?>
***session3.php(删除session值所有的数据)*****
<?php 
 //销毁session中的数据
 // Initialize the session.
 // If you are using session_name("something"), don't forget it now!
 session_start();
 unset($_SESSION[‘key值’]); //指定删除session某一个数据
 ///销毁全部session,步骤比较多(这个步骤还可在确认一下)。
 //1. 清空session的值
 $_SESSION=array();
 //2. 删除cookie中保存的sessionid 
 if(isset($_COOKIE[session_name()])){
          setCookie(session_name(),’’,time()-200);
         }
 session_destory();//销毁session
?>
另一个删除session实例:
<?php
 //删除sessoin信息
 //1.删除某一个key<==>val
 session_start();
 //unset($_SESSION['name']);
 //2.删除所有的 key<==>val
 //这样就会把当前这个浏览器对应的session文件删除。
 session_destroy();
 echo "删除session成功!";
?>

Session文件的数据格式:
name|s:8:"shun";age|i:100;isBoy|b:1;arr1|a:3:{i:0;s:6:"北京";i:1;s:6:"小明";i:2;s:5:"hello";}dog1|O:3:"Dog":3:{s:9:"
name 就是 key
s: 表示数据类型
8: 数据大小
* 我们的session中可以保存的数据类型是
string, integer,double , bool array, object.

     在WEB开发中,服务器可以为每个用户浏览器创建一个超全局变量$_SESSION ,注意:一个浏览器独占一个$_SESSION(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的$_SESSION中,当用户使用浏览器访问其它php页面时,其它php页面可以从用户的$_SESSION中取出该用户的数据,为用户服务。

四、Session和Cookie的主要区别:
    Cookie是把用户的数据写给用户的浏览器。Session技术把用户的数据写到用户独占的$_SESSION中,存在服务器的某个路径的文件中。
在使用$_SESSION 前要保证session被初始化,具体的方法有:
    ①先调用session_start();
    ②配置php.ini session.auto_start =1 (不推荐,会影响效率)。

疑问:服务器是如何实现一个session为一个用户浏览器服务的?

软件设计,PHP教程

    图解:当浏览器A访问PHP1时,服务器执行session_start()时在相应的目录中创建一个session文件(比如文件ID号为11),同时回应浏览器A一个cookie:PHPsession=11的信息,这样浏览器A就知道以后访问服务器时需要这个session的文件了。同时,浏览器A要访问PHP2,在PHP2中也要访问session,按流程也应该先创建一个session文件,但在浏览器A发出访问session请示时,同时把cookie:PHPsession=11这个值也发向服务器,服务器知道已经创建了session无需要再创建,同时在cookie:PHPsession=11指定的文件中取值。

     在前面的案例基础上,做一个测试其它IE可以取到这个php存的数据吗,并解释原因。
     要实现跨浏览器访问session,这里我们只要对session1.php文件稍作修改即(http协议)[测试要成功,主要满足: 1. 先清空 cookie 2. 再用第二个浏览器浏览时,要注意先关闭前一个浏览器,否则第二个浏览器会把第一个浏览器内存的phpsessionid带给服务器,这样第二个浏览器就能访问到第一个浏览器创建的session(在不做特殊情况下就可以成功的!) 主要是看看httpwatch的http包(如果怕出问题,可以一边分析http包,一边推测现象..).]
<?php
 include_once('Dog.php');
 session_start();
 $_SESSION['bookname']="天龙八部";
 $_SESSION['writer']='金庸';
 $dog1=new Dog();
 $dog1->set_name('youyou1');
 $dog1->set_color('红色');
 $_SESSION['mydog']=$dog1;
 //利用cookie把当前session id保存到cookie名字(这句话很管用)
 setcookie('PHPSESSID',session_id(),time()+3600);
 echo '创建session成功2!';
?>
 //3.取出对象
 //保存一个对象到session文件
 if(!empty($_SESSION['dog1'])){
  $xiaogou=$_SESSION['dog1'];
  echo "<br/>小狗的名字:".$xiaogou->getName();
 }else{
  echo "对象没有";
 }

【推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第45讲:PHP程序设计中的session技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值