“用户访问每个页面都要去跟数据库验证一遍” 这怎么会呢?
1,浏览器URL访问页面资源,
2,查看SESSION会话是否记录登陆状态,如“否”从3继续,如“是”则到5
3,获取浏览器客户端的COOKIE用户标识信息,如果存在用户信息则继续4,如“否”或者不符合既定原则 则到6
4,判断用户标识是否可信,比如将加密的字串解密,取出字串中的id和密码与数据库中信息对比是否匹配,如果匹配则到5,如果不匹配则6
5,验证登陆状态通过
6,验证登陆状态不通过
如此看怎么会老是读数据库呢?
分割线 一般常规“记住登陆”方法,可以将ID和密码组合成字符串再salt加密后存到浏览器客户端。每次和服务器端验证时,再解密分割取得ID和密码与数据库比对。如此安全性还是可以的。
比如这是存到客户端COOKIE
$data = $id . "\t" . md5( $password . $slat); //$slat可以是硬编或者随机存在用户列的值
$identity = base64_encode( encrypt( $data , $key ) );//encrypt为自实现的加密函数或方法,$key 可以是硬编或者随机存在用户列的值
setcookie("testuser", $identity, time()+3600);
比如这是取
if(isset($_COOKIE['testuser']))
{
$identity = $_COOKIE['testuser'];
list($id, $password) = explode("\t", decrypt( base64_decode( $identity ) , $key));//decrypt为自实现的解密函数或方法,$key 可以是硬编或者随机存在用户列的值
//todo 与数据库列值比对
//...
}