PHP Cookie与Session
一、Cookie
1、Cookie是什么?
cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
2、如何创建 Cookie?
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于 <html> 标签之前。
语法
setcookie(name, value [, expire, path, domain]);
参数
//name,cookie的名称;
//value,cookie的值,会自动进行 URL 编码。接收时会进行 URL 解码。COOKIE值的类型只能是标量数据类型,不可是数组、对象、资源。
//expire,cookie的有效期;
//path,cookie的服务器路径;
//domain,cookie的域名;
实例
<?php
// 设置过期时间,过期时间:时间戳 + 要存放的时间秒
setcookie('name','张三', time() + 3600);
// 添加COOKIE数据,存字符串
setcookie("username","admin",time() + 7*24*3600);
setcookie("password","123456",time() + 7*24*3600);
// 添加COOKIE数据,存数组
setcookie('user[id]',10 );
setcookie('user[name]','李四' );
setcookie('user[email]','lisi@163.com' );
3、如何取回 Cookie 的值?
PHP 的 $_COOKIE 变量用于取回 cookie 的值。
<?php
// 输出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
4、如何删除 Cookie?
当删除 cookie 时,您应当使过期日期变更为过去的时间点。
<?php
//unset($_COOKIE['user']);
// 删除COOKIE数据:设置有效期为过去的某一个时间
// setcookie("username","admin",time()-1);
// setcookie("password","123456",time()-10);
// 或者
// 删除COOKIE:设置COOKIE的值为false或空字符
setcookie("username",false);
setcookie("password","");
二、Session
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
1、开始 PHP Session
在把用户信息存储到 PHP session 中之前,首先必须启动会话。
注释:session_start() 函数必须位于 <html> 标签之前:
实例
<?php session_start(); ?>
<html>
<body>
</body>
</html>
2、存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量
<?php
//开启SESSION会话
session_start();
// 存储 session 数据
$_SESSION['userid']=10;
$_SESSION['username']='admin';
// 读取SESSION数据
echo "用户ID:".$_SESSION['userid']."<br>";
echo "用户名:".$_SESSION['username']."<br>";
//打印$_SESSION数组
print_r($_SESSION);
3、销毁 Session
如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
<?php
//开启SESSION会话
session_start();
// 存储 session 数据
$_SESSION['userid']=10;
$_SESSION['username']='admin';
// 读取SESSION数据
echo "用户ID:".$_SESSION['userid']."<br>";
echo "用户名:".$_SESSION['username']."<br>";
unset($_SESSION['userid']);
//session_unset(); // 文件会留下来,服务器会保存之前的session生成的文件
//session_destroy(); // 服务器上的文件也删除
//打印$_SESSION数组
print_r($_SESSION);
4、登录实例
<?php
// 表单提交后,接收前台表单传过来的数据
$data = $_POST;
// 清除一些空白符号
foreach ($data as $key => $value) {
$data[$key] = trim($value);
}
//变量赋值
$username = $data["username"];
//密码MD5()加密
$password = md5($data["password"]);
//PDO连接mysql
try{
$pdo = new PDO('mysql:host=localhost;dbname=lianxi','root','1qazxsw2');
}catch(PDOException $e){
//抛出错误
echo '数据库连接失败' . $e->getMessage();
}
//拼接sql语句
$sql = "SELECT * FROM `tp_user` WHERE `password` = :password AND `username` = :username";
//预处理sql语句
$pre = $pdo -> prepare($sql);
//参数绑定
$pre -> bindParam('username',$username,PDO::PARAM_STR);
$pre -> bindParam('password',$password,PDO::PARAM_STR);
//执行sql语句
$exe = $pre -> execute();
//返回结果集
$userInfo = $pre -> fetch();
//判断用户信息是否存在
if (!empty($userInfo)) {
// 当验证通过后,启动 Session
session_start();
// 注册登陆成功的 admin 变量,并赋值
$_SESSION["admin"]['userid'] = $userInfo['id'];
$_SESSION["admin"]['username'] = $userInfo['username'];
} else {
die("用户名或密码错误~");
}
三、COOKIE和SESSION的区别
(1)存储位置:Cookie存储在客户端浏览器中,相对不安全;Session内容所在文件存储在服务器中,一般在根目录下的tmp文件夹中,相对更安全。
(2)数量和大小限制:Cookie存储的数据在不同的浏览器会有不同的限制,一般在同一个域名下,Cookie变量数量控制在20个以内,每个cookie值的大小控制在4kb以内。session值没有大小和数量限制,但如果数量过多,会增大服务器的压力。
(3)内容区别:cookie保存的内容是字符串,而服务器中的session保存的数据是对象。
(4)路径区别:session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到;而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。