一.cookie增删改查
<?php
// cookie
//1.设置cookie
setcookie('username','admin',time()+3600);
//2.查看cookie: 超全局系统变量[数组]: $_COOKIE
echo '<br>',$_COOKIE['username'];
//3.删除cookie
setcookie('username','admin',time()-3600);
echo '<br>',$_COOKIE['username'];点击 "运行实例" 按钮查看在线实例
二.cookie登录的实现
1.公共函数和头部和底部的抽取
1.connect.php
<?php
// 连接数据库
$dbc = mysqli_connect('127.0.0.1','root','root','php');
//判断连接是否成功
if (mysqli_connect_errno()) {
die('连接失败'.mysqli_connect_error());
}
2.header.php
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>
<?php
echo isset($page_title) ? $page_title : '默认标题';
?>
</title>
</head>
<body>
<h1>我是页面的公共头部</h1>
3.footer.php
<h1>我是页面的公共底部</h1>
</body>
</html>
4.function.php
<?php
/**
* 公共函数库
*/
//用户登录成功之后的跳转
function redirect_user($page='index.php')
{
//默认的url
$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
//如果有,去掉url右侧的斜线
$url = rtrim($url, '/\\');
//添加上当前脚本名称
$url .= '/'.$page;
//跳转到指定地址
header('Location:' .$url);
exit();
}
//验证用户登录
function check_login($dbc, $email='', $password)
{
//初始一个保存错误信息的数组
$errors = [];
//非空验证
if (empty($email)) {
$errors[] = '邮箱不能为空';
} else {
$e = mysqli_real_escape_string($dbc,trim($email));
}
//非空验证
if (empty($password)) {
$errors[] = '密码不能为空';
} else {
$p = mysqli_real_escape_string($dbc,trim($password));
}
//到表中进行数据验证
if (empty($errors)) {
// 根据邮箱和密码进行验证,并返回id, name
$sql = "SELECT `id`,`name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p')";
//执行查询
$res = mysqli_query($dbc, $sql);
if (mysqli_num_rows($res) == 1) {
$row = mysqli_fetch_array($res, MYSQLI_ASSOC);
//返回查询结果
return [true, $row];
} else {
$errors[] = '邮箱或密码不正确,请重新输入';
}
return [false, $errors];
}
}点击 "运行实例" 按钮查看在线实例
2.具体功能的实现
index.php
<?php
$page_title = '我是首页';
//导入页面的公共头部
include 'inc/header.php';
echo '<h2 style="color:red">我是首页</h2>';
//判断用户是否登录?
if (isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
echo '<a href="logout.php">退出</a>';
} else {
echo '<a href="login.php">登录</a>';
}
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
login.php
<?php
//登录成功页面
//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
require 'inc/function.php';
redirect_user();
}
$page_title = '登录成功';
//导入页面的公共头部
include 'inc/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_COOKIE['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
logout.php
<?php
//退出登录页面
//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
require 'inc/function.php';
redirect_user();
} else {
//退出登录,删除cookie
setcookie('id','',time()-3600);
setcookie('name','',time()-3600);
}
$page_title = '退出登录';
//导入页面的公共头部
include 'inc/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
login_page.php
<?php
$page_title = '用户登录';
include 'inc/header.php';
//错误 信息显示
if (isset($errors) && !empty($errors)) {
$errors_msg = '<p style="color:red">';
foreach ($errors as $msg) {
$errors_msg .= $msg .'<br>';
}
echo $errors_msg .'</p>';
}
?>
<h2 style="color:red">用户登录</h2>
<form action="login.php" method="post">
<p>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" value="<?php echo isset($_POST['email'])?$_POST['email']:'' ?>">
</p>
<p>
<label for="password">密码:</label>
<input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>">
</p>
<p>
<button type="submit" name="submit" id="submit">登录</button>
</p>
</form>
<?php include 'inc/footer.php'?>点击 "运行实例" 按钮查看在线实例
三.session的增删改查
<?php
// session
// 开启会话,在浏览上创建一个基于cookie的session_id
session_start();
//创建sessoin
$_SESSION['user_name'] = 'admin';
$_SESSION['user_id'] = 120;
//更新
$_SESSION['user_name'] = 'peter zhu';
// 查看
echo $_SESSION['user_name'];
//删除
session_destroy(); //服务器上的sessoin删除了
setcookie('PHPSESSID','',time()-3600); //浏览器上的session_id删除点击 "运行实例" 按钮查看在线实例
四.实现session登录实战
第一部分,公共的部分和cookie一样
第二个部分
index.php
<?php
//启动会话
session_start();
$page_title = '我是首页';
//导入页面的公共头部
include 'inc/header.php';
echo '<h2 style="color:red">我是首页</h2>';
//判断用户是否登录?
if (isset($_SESSION['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
echo '<a href="logout.php">退出</a>';
} else {
echo '<a href="login.php">登录</a>';
}
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
login.php
<?php
//启动会话
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//加载函数库
require 'inc/function.php';
//连接数据库
require 'inc/connect.php';
//验证登录
list($check, $data) = check_login($dbc,$_POST['email'],$_POST['password']);
//检测是否验证通过
if ($check) {
//设置session
$_SESSION['id'] = $data['id'];
$_SESSION['name'] = $data['name'];
//跳转
redirect_user('loggedin.php');
} else {
$errors = $data;
}
//关闭
mysqli_close($dbc);
}
include 'login_page.php';点击 "运行实例" 按钮查看在线实例
loggedin.php
<?php
//启动会话
session_start();
//登录成功页面
//判断用户是否登录?
if (!isset($_SESSION['id'])) {
require 'inc/function.php';
redirect_user();
}
$page_title = '登录成功';
//导入页面的公共头部
include 'inc/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_SESSION['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
login_page.php
<?php
//启动会话
session_start();
//登录成功页面
//判断用户是否登录?
if (!isset($_SESSION['id'])) {
require 'inc/function.php';
redirect_user();
}
$page_title = '登录成功';
//导入页面的公共头部
include 'inc/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_SESSION['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'inc/footer.php';点击 "运行实例" 按钮查看在线实例
loginout.php
<?php
//启动会话
session_start();
//退出登录页面
//判断用户是否登录?
if (!isset($_SESSION['id'])) {
require 'inc/function.php';
redirect_user();
} else {
//退出登录,删除session
// setcookie('id','',time()-3600);
// setcookie('name','',time()-3600);
session_destroy(); //服务器上的session信息消除
setcookie('PHPSESSID','',time()-3600);
}
$page_title = '退出登录';
//导入页面的公共头部
include 'inc/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
//导入页面的公共底部
include 'inc/footer.php';
五.cookie和session的优缺点
它们之间的优缺点
Session保留在服务器端,给每个客 户分配一个唯一的数字,作为每个客 户的标识,
Cookies是保留在客 户端的,每次发出页面请求时,都会把里面的数据发送给服务器端.
Cookies适合做保存用户的个人设置,爱好等,Session适合做客 户 的身份验证.
session保存在服务器,客 户端不知道其中的信息;cookie保存在客 户端,服务器能够知道其中的信息。
session中保存的是对象,cookie中保存的是字符串。
session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
session需要借助cookie才能正常工作。如果客 户端完全禁止cookie,session将失效。
两个都可以用来存私密的东西,同样也都有有效期的说法。
session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客 户端的,过期与否可以在cookie生成的时候设置进去。
cookie 也可以设置成关闭浏览器既消失.
cookie数据存放在客 户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
单个cookie在客 户端的限制是3K,就是说一个站点在客 户端存放的COOKIE不能超过3K。
一个web站点向客 户端发送的cookie不得超过20个,
一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB
其次不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。比如:MS IE+SERVICE PACK 1
不能正确处理带域名和路径的Cookie ,Netscape Communicator 4.05和MS IE 3.0不能正确处理不带路径和
时间的Cookie。至于MS IE 5 好象不能处理带域名、路径和时间的Cookie。 一般做用户登陆用session
存放用户其他信息可以用cookie,比如一个网上商城没有会员系统的话,可以有cookie来存放他放到购物车里的东西.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号