您好,匿名用户
随意问技术百科期待您的加入

PHP判断用户登录状态,效率并且安全的方案是什么?

0 投票

本人比较菜,目前使用的方案是

1.在客户端COOKIES中保存用户ID和一个加密码(规则只有我知道)
2.如果程序检测到客户端保存的COOKIES ID。就去跟数据库验证加密码,如果一致则返回对应用户的登录信息,否则返回FALSE

感觉效率和安全性都不是很好

1.用户访问每个页面都要去跟数据库验证一遍
2.加密码虽然规则很复杂,但是保存在客户端依然存在被破解的可能性

用户头像 提问 2014年 2月3日 @ Archer 上等兵 (494 威望)
分享到:

1个回答

0 投票
 
最佳答案

“用户访问每个页面都要去跟数据库验证一遍” 这怎么会呢?

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  与数据库列值比对
    //...
}
用户头像 回复 2014年 2月3日 @ Varus 上等兵 (281 威望)
选中 2013年 9月7日 @Archer
提一个问题:

相关问题

0 投票
1 回复 27 阅读
0 投票
1 回复 1 阅读
用户头像 提问 2014年 6月7日 @ Talon 上等兵 (294 威望)
0 投票
0 回复 18 阅读
0 投票
1 回复 41 阅读
0 投票
1 回复 27 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...