Home  >  Article  >  php教程  >  php实现web系统单点登录

php实现web系统单点登录

WBOY
WBOYOriginal
2016-06-13 09:28:461691browse

php实现web系统单点登录

   随着用户不断扩大的需求,更多的系统被建造起来。为了获得更好的用户体验,需要实现用户单点登录。所谓单点登录,就是用户在一个系统上登录后,其他系统就不需要重复登录。单点的登录的好处很明显,提高了用户体验度。如何实现单点登录,在这里我提供两种解决方案:

  1.一级域名相同,通过共享cookie来实现

  有a.the.com和b.the.com A B两个站点, 只要在A,B任何一个站点登录后,两个网站就都可以使用,不需要在另一个站点登录了。而通过基于cookie的实现方式,前提是两个系统共享一级域名,并且用户要可以唯一标示。上面这两个站点的一级域名是the.com,我们只需要将Cookie的domain属性设置为the.com;具体处理过程如下:当用户在其中某一个站点登录,就设置一个cookie信息,该cookie包含标识用户ID,为了安全,还需要利用对该cookie的值加密。当用户访问其他网站的时候,首先判断是否存在cookie,如果有的话,便解密该cookie,获取用户信息,设置用户为登录状态。

  下面是PHP示例代码

  function login() //正常的登录

  {

  .......//验证用户的合法性

  $_SESSION['uid'] = $user_id;

  setcookie('sign', encrypt($pass9), '', '/', 'the.com');

  }

  funtion sign()

  {

  $sign = $_COOKIE['sign'];

  if(!empty($sign))

  {

  $sign = decrypt($sign);

  ..........///登录成功

  }

  }

  这里需要注意的是:加解密一定需要做安全验证。但是这个方法也不够完美,两个站点必须有相同一级域名;另外这种完全基于cookie的方式,安全性不够高。

  2.采用专门登录系统。

  所有的站点共享一个登录系统;当用户在其中的一个站点登录成功时, 该系统调用其他站点的登录接口,完成用户在其他站点的登录,同时设置相应的登录信息;或者在用户登录时,只在该系统保存用户登录信息,当用户在其他站点登录时,必须请求该系统接口,获取用户是否登录的信息。前一种方式的缺点是:不管用户有没有使用其他站点,那些站点都需要保存用户状态;后一种方式就把所有的压力都转移到登录系统上面来。而如果要实现用户退出的统一操作,就需要站点调用登录系统的退出接口,然后登录系统接口调用其他站点的退出接口;或者设置一个标记,如果这个标记不存在则标示用户退出,此时只要把该标示清空即可,其他站点发现该标示不存在就知道用户已经退出系统。

  这种处理方式需要在登录系统和个站点之间规定登录接口,和注销接口。通过这些接口,个站点可以很方便的处理用户登录或退出:

  function login()

  {

  $info = callLoginServer(); //访问登录服务器

  if(!empty($info)) //登录成功了

  }

  //用户没有登录,则在本系统中登录并调用登录服务器接口

  function loging() //本系统登录

  {

  .....//登录成功

  callSeverLogin();//通知用户登录

  }

  上面只是简单的逻辑结构,对于正式的系统需要做具体的处理。

  如果大家还有更好的方法,欢迎一起讨论!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn