登录验证新思路,演示登录代码.
需要用到 jquery 以及 md5 相关javascrip方法. 代码中直接引用了外部链接. 如果运行出现状况, 请单独下载,修改代码.演示数据只有一个用户 id:test. passwd:abc123. 用文本存放数据. 简单演示. 喜欢
需要用到 jquery 以及 md5 相关javascrip方法. 代码中直接引用了外部链接. 如果运行出现状况, 请单独下载,修改代码.
演示数据只有一个用户 id:test. passwd:abc123. 用文本存放数据. 简单演示. 喜欢记得收藏, 转载请注明出处.
演示数据只有一个用户 id:test. passwd:abc123. 用文本存放数据. 简单演示. 喜欢记得收藏, 转载请注明出处.
<?php
/* 演示 登录
$ua 表示存在的用户数据信息,
md5 是一个javascript 函数. 需要用户自己导入库.
引入 jquery . 方便 Ajax 调用.
*/
define('H_MAX', (256*8)-1); /*本可以设置更大, 只可惜IE的弹出框...*/
@ $a = isset($_GET['a']);
@ $id = $_POST['id'];
@ $passwd = $_POST['passwd'];
if($a) {
$mstr = get_mstr(); /* 随机串 */
$hstr = get_hstr(); /* 混杂串 */
// $hstr = 256*2-1;
$ua = get_u_i(); /* 获取用户数据. */
$str = md5($ua['passwd'].dechex($mstr+$hstr).dechex($hstr));
$ua['str'] = dechex($hstr);
set_u_i($ua); /* 将信息保存,为实际登录做准备.演示用. */
echo json_encode(array('mstr'=>$mstr, 'str'=>$str));
exit;
}
/* 真正的登录验证开始了,之前的都是准备工作 */
if(isset($_POST['id'])) {
/* 跳过其他验证,只针对密码验证 */
$st = false;
$ua = get_u_i();
if($id && ($ua['id'] == $id) && (md5($ua['passwd'].$ua['str']) == $passwd)) {
$st=true;
}
if($st) { /* 验证通过了, 随便搞吧 */
$ua['str'] = dechex(get_hstr());
set_u_i($ua); /* 将信息保存,为实际登录做准备.演示用. */
echo <<<EOT
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test login</title>
</head>
<body>
胜利大联欢.
</body>
</html>
EOT;
}
else {
/* 失败了, 干脆啥事不干得了. */
}
exit;
}
$ua = array('id'=>'test', 'passwd'=>md5('abc123'), 'str'=>'');
set_u_i($ua); /* 先写入点数据 演示用,无实际意义, 实际应用这步骤不需要 */
function get_mstr() {
$t = explode(' ', microtime());
$time = $t[0] * 1000;
$time = intval($time);
//$time = dechex($time);
return $time;
}
function get_hstr() {
$h_max = H_MAX;
return mt_rand(0, $h_max);
}
/* 获取用户信息 演示用,无实际意义*/
function get_u_i() {
$file = 'test_login.txt';
$str = file_get_contents($file);
$str = trim($str);
@list($id, $passwd, $str) = explode("\t", $str);
return array('id'=>$id, 'passwd'=>$passwd, 'str'=>$str);
}
/* 更新用户信息,为用户登录做准备. 演示用, 无实际意义 */
function set_u_i($ua) {
$file = 'test_login.txt';
file_put_contents($file,implode("\t", $ua));
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test login</title>
<script src="http://pajhome.org.uk/crypt/md5/2.2/md5-min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
var h_max = <?=H_MAX;?>;
var last_id='';
var mstr='';
var str='';
var $id = $('#id');
var $passwd = $('#passwd');
var $form = $("form:first");
$id.focus(); /* 自动聚焦 */
/* 焦点转移后 */
$id.blur(function(a,b){
if(last_id == $id.val()) return ;
last_id = $id.val();
var o = s1();
if(o) {
mstr = o.mstr;
str = o.str;
}
});
$form.submit(function() {
$('#submit').prop('disabled',true);
var p = md5($passwd.val());
var st=0; /* 匹配状态 */
for(var i=0;i<=h_max;i++){
var t=''+(p)+(parseInt(mstr)+parseInt(i)).toString(16)+i.toString(16);
if(str==md5(t)) {
st=1; /* 找到匹配,更新状态 */
$passwd.val(md5(p+i.toString(16)));
break;
};
}
if(!st) {
/* 执行到这里 基本上可以确定密码错误. 可以直接给出提示, 也可以不理会
{
alert('登录失败');
return false;
}
这里阻止了提交,实际中可以根据需求决定 */
}
//$('#submit').attr('disabled','disabled');
return true;
});
function md5(s) {
return hex_md5(s);
}
function s1(){
var a;
var e;
$.ajax({
url: "?a",
type: "POST",
timeout:10000,
data: {},
dataType: "json",
async: false,
error: function(XMLHttpRequest, textStatus, errorThrown){
e=true;
//alert(textStatus+"&"+errorThrown);
},
success: function(data, textStatus){
a = data;
}
});
if(e) return false;
return a;
}
});
</script>
</head>
<body>
<form action="" method="post" enctype="application/x-www-form-urlencoded" name="form1" target="_self" id="from1">
<label>用户名:
<input name="id" type="text" id="id">
</label>
<label>密码:
<input name="passwd" type="password" id="passwd">
</label>
<label>
<input name="submit" type="submit" id="submit" value="登录">
</label>
</form>
</body>
</html>
- 上一篇:微信扫描登录
- 下一篇:最最初级的单一路口,路由分发的功能
精彩图集
精彩文章






