VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP中session共享和登录验证的实现方法

我们先来讲述一下利用session来登录,登录页面05.php的代码如下:

  1. <?php  session_start() ;       //初始化session 
  2. if (isset ($_SESSION['shili'])){ 
  3. header ("Location:shili.php") ;   //重新定向到其他页面 
  4. exit ; }  ?> 
  5. <script language="javascript"
  6. function checklogin (){ 
  7. if ((login.username.value!="") && (login.password.value!="")) 
  8. return true        //判断用户名和密码不为空,返回TRUE 
  9. else{ alert ("昵称或密码不能为空!") } } 
  10. </script> 
  11. <style type="text/css"
  12. .style1 { font-size: 13px;  font-family: "黑体";  font-weight: normal;   color: #0099FF; } 
  13. </style> 
  14. <div align="center"
  15. <table width="260" border="1" bgcolor="#D8EFFA"
  16. <form name="login" method="post" action="06.php" onSubmit="return checklogin()"
  17. <tr align="center"
  18. <td height="30" colspan="2"><span class="style1">管理系统登录</span></td> 
  19. </tr> 
  20. <tr> 
  21. <td width="90" align="center" class="style1">管理员: </td> 
  22. <td width="170" height="20" align="left" valign="middle"><input name="username" type="text" id="username" size="20"></td> 
  23. </tr> 
  24. <tr> 
  25. <td align="center" class="style1">密码: </td> 
  26. <td height="20" align="left" valign="middle"><input name="password" type="password" id="password" size="20"></td> 
  27. </tr> 
  28. <tr> 
  29. <td align="center" class="style1">&nbsp ; </td> 
  30. <td height="20" align="center"><input type="submit" name="Submit" value="登 录"></td> 
  31. </tr> 
  32. </form> 
  33. </table> 
  34. </div> 

该程序是一个管理员登录界面,首先初始化session,然后通过检测session变量是否已经注册来检测用户是否已经登录过,如果登录过,则无需再次登录,直接定向到其他页面。这里还使用了javascript来判断是否输入了用户名和密码。

验证登录的页面,06.php的代码如下:

  1. <?php  session_start () ;    //初始session 
  2. if (isset ($_SESSION['shili'])){ 
  3. header ("Location:shili.php") ;  //重新定向到其他页面 
  4. exit ; }    //登录过的话立即结束 
  5. $shili_name=$_POST['username'] ;  //获取参数 
  6. $password=$_POST['password'] ; 
  7. //验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库 
  8. if ($shili_name=="mr" and $password=="mrsoft"){ 
  9. session_register ("shili") ;   //注册新的变量,保存当前会话的昵称 
  10. $shili = $shili_name ; 
  11. echo "<font color=red>登录成功!</font>" ; 
  12. header ("Location:shili.php") ;  //登录成功重定向到管理页面 
  13. }else
  14. echo "<table width='100%' align=center><tr><td align=center>" ; 
  15. echo "账号或密码错误,或者不是管理员账号<br>" ; 
  16. echo "<font color=red>登录失败!</font><br><a href='http://wyl072.blog.163.com/blog/05.php'>请重新输入</a>"
  17. echo "</td></tr></table>" ; }    
  18. ?> 

该程序同样是先通过session变量检测用户是否已经登录,如果没有,则要对输入的用户名和密码进行验证,正确则注册session变量,输出登录成功!。如不正确,则提示登录失败。

这是一个简单的用户登录验证的程序,通过session变量阻止了那些没有登录而直接浏览的用户。如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:

  1. <?php  session_start () ; 
  2. if (!isset ($_SESSION['shili'])){ 
  3. echo "<p align=center>" ; 
  4. echo "<font color=#ff0000 size=5><strong><big>" ; 
  5. echo "你没有登录,请<a href='http://wyl072.blog.163.com/blog/denglu.php'>登录</a>!" ; 
  6. echo "</big></strong></font></p>" ; 
  7. exit () ;  }   
  8. ?> 

利用session_id实现共享登录

多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享超出了本文的范围,请自行查阅资料。

第二个用途就是,验证同一用户的不同会话,这个比较难理解。这样说吧,一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录……

对于第一个问题,我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦,首先验证的时候产生一个sessionid;代码如下:

  1. <?php  
  2. Session_start();  
  3. $sessionId = session_id();//得到sessionid  
  4. //将session下发给客户端  
  5. .........  
  6. ?> 

客户端携带sessionid这个变量来请求数据,代码如下:

  1. <?php  
  2. Session_id(‘$sessionid');//注意这个时候session_id()这个函数是带有参数的  
  3. Session_start();//这个函数必须在session_id()之后  
  4. ?> 

好了不问题己得到了很好的解决有需要了解的朋友可以参考一下。

 

出处:http://www.phpfensi.com/php/20131202/668.html


相关教程