好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP中session共享和登录验证的实现方法 - php会话

PHP中session共享和登录验证的实现方法

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

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

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

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

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

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

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

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

利用session_id实现共享登录

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

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

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

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

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

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

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

查看更多关于PHP中session共享和登录验证的实现方法 - php会话的详细内容...

  阅读:49次