检查是否登陆以及发出请求的IP是否和建立SESSION的IP一致

检查是否登陆以及发出请求的IP是否和建立SESSION的IP一致

转自http://blankyao.cn
*函数authenticateUser用来检查用户名和密码
*函数sessionAuthenticate用来检查是否登陆以及发出请求的IP是否和建立SESSION的IP一致


<?php   
function authenticateUser($connection,$uesername,$password)   
{   
//检查用户名与密码   
if(!isset($username)||!isset($password))   
  return false;   
//创建密码的信息摘要   
$password_digest=md5(trim($password));   
//创建查找用户的SQL查询   
$query="SELECT password FROM users WHERE user_name='{$username}'AND password='{$password_digest}'";   
//执行查询   
if(!$result=@mysql_query($query,$connection))   
  showerror();   
//刚好查出一条记录则正确   
if(mysql_num_rows($result)!=1)   
  return false;   
else   
  return true;   
}   
//连接至session并检查用户证书   
function sessionAuthenticate()   
{   
  //检查用户是否登陆   
  if(!isset($_SESSION["loginUsername"]))   
  {   
   //请求无法识别现有的session   
   $_SESSION["message"]="You are not authorized to access the URL {$_SERVER["REQUEST_URI"]}";   
   header("Location:logout.php");   
   exit;   
  }   
  //检查用户请求是否来自不同的IP   
  if(!isset($_SESSION["loginIP"])||($_SESSION["loginIP"]!=$_SERVER["REMOTE_ADDR"]))   
  {   
   //请求并非来自创建session的主机   
   //小心会话攻击   
   $_SESSION["message"]="You are not authorized to access the URI {$_SERVER["REQUEST_URI"]} from tha address {$_SERVER["REMOTE_ADDR"]}";   
   header("Location:logout.php");   
   exit;   
  }   
}

一个网站有两个域名的话,同一个ip也登陆不了。
如果用的宽带掉线重连后ip不同的话session也丢失喔。
如履薄冰

回复 #2 我不是鱼 的帖子

又没考虑到。。。我看下怎么解决。。。