如果所有的网站都能够实现单点登录,不仅在用户体验方面有所提高,而且真正体现了集团多个网站间的兄弟性这种有机结合不但便于对其进行管理,而且能更好地体现公司大平台,大渠道的理由. 开发一个伯克网站和一个论坛网站,通过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");
}
?>
|