注意所有取session之前都要判断是否为null
思考问题
浏览网站时,张三李四购买不同的商品,并且在查看购物车时候可以查看到各自需要购买的商品
思路:
- 1、数据库
- 2、cookies
- 3、session
当登陆某个网站,在任意网页界面都能看到登陆的名字?
思路:
- 1、数据库->特别繁琐性能极差,每个页面都要请求数据库,加入用户量多爆炸了
- 2、cookie
- 问题1:安全性
- 问题2:在网络传数据,涉及到带宽的问题(所有涉及到的cookie每次都会进行传递)
解决之道3:session 用session的话 session文件直接保存在服务器端。首先安全性可以保证,数据是存在服务器端的。那么直接从服务器取就好了不需要像cookie一样浏览器传递来传递去省带宽了。
之前的用户管理系统 :无需登录就可以直接管理用户增删查改(有链接就行)
最好的解决方案—>session
Session 是服务器技术,利用这个技术服务器在运行时候可以为每一个用户单独创建一个独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时候,可以把各自的数据放在各自的session中,当用户再去访问服务器中的web资源时,其他web资源再从用户各自的session中取出数据为用户服务
- 默认情况下session文件将被保存在c:/window/temp
session 初步介绍
- ①session是服务器端技术
- ②原理
- ③ session的基本用法(curd)增删查改
- 3.1 如何保存session数据
修改session保存位置
- ④ 注意一个会话对应一个session文件
代码:
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示如何保存session数据***<br/>";
// 1、初始化session
session_start();
// 2、保存数据
$_SESSION['name']="qb";
echo "保存ok!";
保存的格式:
name|s:2:"qb";
以上
字段 | 含义 |
name | 表示key |
s | 表示类型 |
2 | 表示数据大小 |
qb | 表示值 |
保存各种类型session
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示如何保存session数据***<br/>";
// 1、初始化session
session_start();
// 2、保存数据
$_SESSION['name']="qb";
//session 可以保存所有的数据类型 比如 double ,Integer ,boolean ,array ,object 都可以
$_SESSION['age']=100;//保存int
$_SESSION['isBoy']=true;//保存boolean
//保存数组
$arr1 = array("北京","小明","hello",101);
$_SESSION['arr1'] = $arr1;
//保存一个对象
class Dog{
public $dogname;
public $sex;
}
$dog = new Dog();
$dog->dogname="小宝";
$dog->sex="公";
$_SESSION['dog'] = $dog;
echo "保存ok!";
保存后session结构
name|s:2:"qb";age|i:100;isBoy|b:1;arr1|a:4:{i:0;s:6:"北京";i:1;s:6:"小明";i:2;s:5:"hello";i:3;i:101;}dog|O:3:"Dog":2:{s:7:"dogname";s:6:"小宝";s:3:"sex";s:3:"公";}
由上可以看出session中保存的数据类型
String , integer ,double,bool ,array , object
如何获取session数据
小结:
- 1、如果需要使用session,必须要初始化
即session_start(); - 2、session文件中可以放入多个键值对,注意,键不能重复
- 3、如果我们要取出对象,则事先声明下就好