近日在为学校制做校友录时需要身份验证在对比的后决定采用PHP+MYSQL进行身份验证
的前也曾考虑过用cookies或session但是用cookies在用户离线再上线后只要cookies不过期不用登录仍然可以保持在线这对于网吧来说是个隐患而且用户可以关闭cookies这样身份验证就不成功也考虑过用session,session在浏览过程中不断将访问信息加入到session中如果用户在网站WebSite内时间很长浏览页面很多就用导致session越来越大浏览速度降低最后只有重新登录,虽然这种情况不多见但不是我们所希望
我在做这个身份验证时想法是在身份验证同时记录浏览信息
用户ID在每个页面间传递ID值是用MD5加密得到验证是validate_id返回值为(0,1),成功为“1”
思路:
判断被传入ID值是否为匿名登录ID(a684dd572b1887661782981659331eed)32位,如果是返回0并且将浏览信息加入数据库如果否则查询数据库看数据库中用户ID用户IP和传入IDIP值是否相等并且最近浏览时间距当前时间不到20分钟记录
判断得到记录数如果为0则认为离线并用匿名ID登录浏览信息返回0记录不为0时将用户ID用户IP值加入数据库返回1
创建数据库:
create table logging{
id unsigned not null primary key auto_increment,
user_id char(32) not null,//用户ID
logging_ip varchar(20) not null,//记录用户IP地址
page_name varchar(30) not null,//浏览网页名
view_time timestamp not null,
student_id varchar(20)
);
创建:
/*-----begin function validate-id---------------
验证用户是否登录
------------------------------------------------*/
function validate_id($link,$id,$ip,$page_name,$student_id=""){
($ida684dd572b1887661782981659331eed or $id=''){
$query='insert o logging(user_id,logging_ip,page_name,student_id) values ("a684dd572b1887661782981659331eed","'.$ip.'","'.$page_name.'","anonym");';
$result=mysql_db_query("web",$query,$link);
(0);
}
{
$year=strftime("%Y");
$month=strftime("%m");
$day=strftime("%d");
$hour=strftime("%H");
$min=strftime("%M");
$sec=strftime("%S");
echo $time_=$year.$month.$day.$hour.$min.$sec;
// echo ("<br>");
// echo "$year-$month-$day $hour-$min-$sec<br>";
//---------begin 's---------------------------
(($min-=20)<0){
$min60;
(($hour-=1)-1){
$hour24;
(($day-=1)0){
switch ($month) {
12 :$days=30;;
1 :$days=31;;
2 :(($year/40)and($year/100!=0)or($year/4000)){
$days=29;}
{$days=28;}
;
3 :$days=31;;
4 :$days=30;;
5 :$days=31;;
6 :$days=30;;
7 :$days=31;;
8 :$days=31;;
9 :$days=30;;
10 :$days=31;;
11 :$days=30;;
}
$day$days;
(($month-=1)0){
$month12;
$year-=1;
}
}
}
}
//----------------------------------end 's
Type($month,"eger");
($month<10){
Type($month,"");
$month='0'.$month;}
Type($day,"eger");
($day<10){
Type($day,"");
$day='0'.$day;}
Type($hour,"eger");
($hour<10){
Type($min,"");
$hour='0'.$hour;}
Type($min,"eger");
($min<10){
Type($min,"");
$min='0'.$min;}
echo '<br>'.$time_=$year.$month.$day.$hour.$min.$sec;
// echo "<br>$year-$month-$day $hour-$min-$sec<br>";
// echo ("<br>");
$query="select id from logging where user_id='$id' and logging_ip='$ip' and view_time>'$time_';";
$result=mysql_db_query("web",$query,$link);
$count=mysql_num_rows($result);
($count0){
// echo $query="insert o logging(user_id,logging_ip,page_name) values ('a684dd572b1887661782981659331eed','$ip','$page_name');";
$result=mysql_db_query("web",$query,$link);
(0);
}
{
$query="insert o logging(user_id,logging_ip,page_name) values('$id','$ip','$page_name')";
$result=mysql_db_query("web",$query,$link);
(1);
}
}//end
}
//----------------------------end function validate-id---------
这个验证思路方法很简单而且没有考虑到用户在登录后再登录情况大家可以自己加上
如果用cookies可能用cookies建立用户ID再从环境变量$HTTP_COOKIE或$HTTP_COOKIE_VARS中读取都是样不过应该保证用户没有cookies
最新评论