php 通过Cookie实现单点登录

如果所有的网站都能够实现单点登录,不仅在用户体验方面有所提高,而且真正体现了集团多个网站间的兄弟性这种有机结合不但便于对其进行管理,而且能更好地体现公司大平台,大渠道的理由. 开发一个伯克网站和一个论坛网站,通过Cookie实现单点登录的功能,即无论在博客或者论坛中,只要登录后,这个用户在一定时间内,在这两个网站中是通用的.实例位置请参照:TM/Instances/12/6

1> 创建index.php页面,添加用户登录的表单,将登录信息提交到index_ok.php页面中. 在index.php页面中首先连接数据库,然后判断Cookie的值是否为空,如果Cookie的值不为空,并且在指定的数据表中存在该记录,那么将直接进入网站的 主页 ,不必进行登录操作; 如果Cookie的值为空则输出网站登录页面,并且删除指定数据表中已经过期的用户登录信息.

<?php

         include_once 'conn/conn.php';                                   //执行连接数据库的操作

         if($_COOKIE[name]!="" and $_COOKIE[id]!=""){

                   $sql = "select * from tb_login where name = '".$_COOKIE[name]."' and login_id = '".$_COOKIE[id]."'";

                   $num = $conne->getRowsNum($sql);              //返回查询结果

                   $conne->close_rst();                                         //关闭数据库

                   if($num != 0 or $num != ''){ 

                            header("Location: default.php");

                   }else{

?>

<!—省略部分代码-->

<?php

                   }

         }else{

         //清除数据库中1小时以前存储的用户登录数据(即session过期以后的数据)

         $datetimes=mktime()-3600;                            //获取1小时前的时间戳

         $sqls="delete from tb_login where datetime<'".$datetimes."'";                  //执行删除操作

         $nums = $conne->uidRst($sqls);             //返回查询结果

}

?>

         2> 创建index_ok.php文件,获取表单提交的登录信息,完成登录操作. 单点登录的第一个关键点:将登录成功的用户名和SessionID值保存到Cookie中,设置Cookie过期时间为1小时,有效范围是服务器的根目录. 单点登录的第二个关键点:将登陆的用户名和SessionID值存储到一个数据表中. 这个Cookie值和数据表中的数据是验证当前用户是否具有单点登录权限的唯一依据.

<?php

         session_start();

         include_once 'conn/conn.php';                                   //执行连接数据库的操作

         $name = addslashes($_POST['name']);                    //获取用户名

         $pwd = $_POST['pwd'];                                                       //获取密码

         if(!empty($name) and !empty($pwd)){

                   $sql = "select * from tb_member where name = '".$name."' and password = '".$pwd."'";            

                   $num = $conne->getRowsNum($sql);              //返回查询结果

                   $conne->close_rst();                                         //释放查询结果

                   if($num == 0 or $num == ''){                            //如果不正确

                            echo "<script>alert('用户名和密码不正确!'); window.location.href='index.php';</script>";

                   }else{                                                                                    //如果正确,则将登录用户名数据存储到Cookie中

                            $session_id=session_id();                        //获取SessionID

                            setcookie("name", $name, time()+3600, "/");

                            setcookie("id", md5($session_id), time()+3600, "/");               

                            $sqls="insert into tb_login(name,login_id,datetime)values('".$name."','".md5($session_id)."','".mktime()."')";      //向数据库中添加数据

                            $nums = $conne->uidRst($sqls);             //返回查询结果

                            echo "<script>alert('登录成功!'); window.location.href='default.php';</script>";

                   }

         }

?>

3>创建default.php网站主页面,其关键是根据Cookie值和指定数据表中存储的数据判断当前用户是否具有访问主页的权限,如果有则输出网站主页的内容;否则就跳转 到登录 页面.

<?php

         if($_COOKIE[name]!="" and $_COOKIE[id]!=""){

                   include_once 'conn/conn.php';                                   //执行连接数据库的操作

                   $sql = "select * from tb_login where name = '".$_COOKIE[name]."' and login_id = '".$_COOKIE[id]."'";

                   $num = $conne->getRowsNum($sql);              //返回查询结果

                   $conne->close_rst();                                         //关闭数据库

                   if($num == 0 or $num == ''){         

                            header("Location: index.php");

                   }else{

?>

<!--省略部分代码-->

<?php

                   }

         }else{

                   header("Location: index.php");

         }

 

?>

转载于:https://www.cnblogs.com/abcd1235as/p/3277727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值