<?php
/**
* 如何让用户无法篡改cookie?
* 提示:
* md5+salt应用于项目
*/
# == lib/config.php ================================================================================
return array(
'host'=>'localhost',
'user'=>'root',
'password'=>'',
'db'=>'blog',
'charset'=>'utf8',
'salt'=>'Lsd":Adfqef]',
);
# == func函数封装 ================================================================================
/**
* md5加密用户名和盐
* @param $name 用户名
* @return string 加密后的用户名+盐
*/
function ccode($name){
$cfg = include (ROOT.'./lib/config.php');
$salt = $cfg['salt'];
return md5($salt . '|' . $name);
}
/**
* 检测用户是否登录(通过ccode防止用户伪造cookie)
* @return bool
*/
function acc(){
//如果两个cookie有一个不存在,则返回false
if( !isset($_COOKIE['name']) || !isset($_COOKIE['ccode'])){
return false;
}
return $_COOKIE['ccode'] === ccode($_COOKIE['name']);
}
# == login.php ================================================================================
setcookie('name', $user['name']);
setcookie('ccode', ccode($user['name']));
header('Location: artlist.php');
# == 总结 ================================================================================
为什么不用session来加密?
session_id是随机生成的,别人很难伪造;用session感觉上很省事;但是用session的效率不如用cookie的高;
因为session放在服务器端,像大型的网站,每天的访问量成千上万上亿,一个目录下放置那那么多的session文件,再查询,会拖累服务器的效率;
用cookie,它是由浏览器存储的,上亿个客户,上亿台浏览器,负担交给了浏览器,访问的时候带过来,带过来之后算一下就可以了