passport通行证设计一例
写得比较粗糙,未打草稿,有不到之处,请原谅。
新单位上班,第一份差事就是几个网站的整合。会员数据大概有120w左右。分别来自不同的数据库,怎么整合这些资源及处理passport问题,着实让我郁闷了好久。经过N根头发的脱落痛苦挣扎之后,终于拟定处理方案。 首先,做会员整合设计。 考虑到百W级的用户库极有可能存在着用户同名的问题,在进行会员整合时拟两种方案: 经过分析发现,其实第二种还是避免不了用户同名现象,经过与领导沟通,决定采用第一种方案。 建立public_user表,将所有用户基本数据导入,库设计为 id,username,password,email。为嘛这样设计,在这里不进行述说,因为本文的目的是做多系统passport,整合数据表,只是前奏。 好了,我们的会员数据已经整合完毕了,现在开始讲passport。 Passport有两种情况,一种是系统采用session,一种是cookie,本次进行passport设计,采用的是后一种。 其实说白了,passport当在采用cookie时,原理是很简单的,无非就是为不同的系统产生它所需要的cookie而已。但我们考虑的是,尽量的在不动系统的基础下进行passport,所以最大的难点可能就在于puclib_user 与 不同的系统user进行同步的问题了。 OK,让我们开始时。 系统说说明:本文举例为 phpwind4.3.2论坛与公司内部使用的投票系统。以下简称为pw及vote。目录架构为 : ROOT_PATH/club,ROOT_PATH/vote。 我们已经建好了数据库,表为public_user库,并且确保我们已经将所有会员数据导入。 书写passport.php文件,在passport.php文件中,我们需要做的工作是为不同来源的文件产生不同的cookies及进行会员数据更新。为什么说到passport会对会员数据更新呢?这是因为我一直坚信进行最小的源系统修改才是整合之道。也就是说,当用户通过不同的系统进行注册时,我们同时在此系统下的USER及public_user表里写数据,当然,public_user表简单了一些,只有username,password,email几个字段。 我们开始模拟用户的整个lgoin过程。 可能会存在着多种系统,但原理是一样的,我这里只讲两个系统实例。多系统你可以考虑做一个array数组来进行映射。 首先,我们确定有一个入口。如在公共的header文件的模板中加入类似于下面的超链接: 或者是写一个passport的页面文件,检测public是否在cookie中存在。如果已经存在,加上上面的地址,否则给login页面 然后我们需要对各个系统间的login.php进行一个修改,修改内容雷同,以pw为例:
CODE:
[Copy to clipboard]
<?php
Cookie("winduser",StrCode($winduid."t".$windpwd),$cktime); Cookie('lastvisit','',0);//将$lastvist清空以将刚注册的会员加入今日到访会员中 ?> 两行,在下面加上一行代码:
CODE:
[Copy to clipboard]
<?php
Cookie(‘public’, authcode ($pwuser.$windpwd),$cktime); ?> 注:这里的authcode是专为passport文件使用而设计的类似于phpwind中的StrCode 这行代码生成了一个public数据,也就是公共的用户cookie,可以被整个网站的任意系统访问。 现在public(系统中公共的用户cookie信息)有了,我们还要做两种情况假设: ok,现在一切都变得那么简单,这种方式的passport.php文件可能如下: 注:我们假设你已经存在了一个公共的passport所需要的所有函数集,这里面的函数,一般仅仅是不同系统中的cookies生成,或者加密方式,一般情况下,我们直接复制相应系统下login所需函即可
CODE:
[Copy to clipboard]
<?php
require_once(‘/pulic/function.php’); require_once(‘/puclib/global.php’); //此文件中,我们配置了数据库连接及一些公共的信息 $go = $_GET[‘go’]; //举例方便,请用户自行过滤 //OK,在这里我们进行一次检测,我们需要检测club用户表里是存存在着 $cktime = $timestamp+31536000; if( $go==’vote’ ) 在public/function.php文件中,我复制了pw中的cookie操作相应函数:
CODE:
[Copy to clipboard]
<?php
……………. function StrCode($string,$action='ENCODE') { global $settings; …………… } function Cookie($ck_Var,$ck_Value,$ck_Time = 'F') function GetCookie($Var) 好了,login已经解决,同进算是解决了,我们做同出。 在public下面建立一个quit.php文件:
CODE:
[Copy to clipboard]
<?php
foreach ($_COOKIE as $key=>$val) { Cookie($key,'',0); } header("Location:{$_SERVER['HTTP_REFERER']}"); ?> 就这么简单。 现在还需要做的是在用户注册时写入public_user同样的数据,里面可以只包含有 username,passrow,email几个字段就OK了,这个步骤基本都很简单,只需要在相应的系统注册程序中加入INSERT INTO public_user…..执行语句就OK了。。。 注:文中所有实例cookie生效及域都在同样下有效。 如果大家感兴趣,下次写个考虑到另外一种情况的passport设计: 假设用户已经logined,但不是从指定入口进入,而是直接输入网址。。。 |
passport通行证设计一例相关推荐
- 2016-04-25-信息系统实践手记5-CACHE设计一例
layout: post title: 2016-04-25-信息系统实践手记5-CACHE设计一例 key: 20160425 tags: 业务 场景 CACHE 系统分析 系统设计 缓存 modi ...
- 五步打造APP节日主题设计:以Lofter新年图标设计为例
我们需要做有依据,有逻辑,有理念的设计,需要发散思维,整合创意,严谨输出,让设计经得起推敲 前言 2018年春节已远去,一直想把Lofter新年Logo设计思路分享给大家,直到现在才整理出来,希望 ...
- FPGA之旅设计99例之第二十一例----VGA串口SDRAM显示图片
一. 简介 本例将接着上一例实现的sdram控制器进行封装.上例中只是实现了一个基本的控制器,在实际使用中,通常读写时钟是两个不同频率的,所以并不能满足要求. 在本例中,将对读写接口进行封装,将读写接 ...
- Flash CS3动画设计150例
[书名]Flash CS3动画设计150例 [作者]金胜恩 编著 [ISBN]978-7-121-07457-8 [出版社]电子工业出版社 [出版日期]2009年1月 [宣传语] 精心:设计的实例覆盖 ...
- 多测师拱墅校区_肖sir_设计用例方法
一.认识基本术语 1.动态测试 :通过运行软件的组件或系统来测试软件 2.静态测试:对组件的规格说明书进行评审,对静态代码进行走查 3.正式评审:对评审过程及需求文档的一种特定评审 4.度量:测量所使 ...
- 设计用例的依据和方法
测试用例是什么 测试用例就是将软件测试的行为活动,做一个科学化的组织归纳并形成文档或脚本 为什么要编写测试用例 设计用例的依据和方法 等价类.边界值.因果图.错误猜测.正交试验等等,用到最多的肯定是等 ...
- 业务测试如何设计用例
业务测试如何设计用例 一.流程类测试设计 1.流程类测试点有哪些特征 2.流程类分析方法 二.参数类测试设计 1.参数类测试点有哪些特征 2.参数类测试设计方法 三.数据类测试设计 1.数据类测试点有 ...
- FPGA之旅设计99例之第二十例---SDRAM存储器实现
一. 简介 本例将介绍SDRAM的使用.SDRAM是一个存储器件,存储容量大,存储速度比较快,速度可达100M,特别适合用来当中视频或者音频中的存储器件. 在采集到OV5640传输过来的图像数据的时候 ...
- 信号与系统教学设计样例说明-2021春季学期
简 介: 本文通过一次课程录像对于当时的这次课程设计进行了反思与记录.主要是为了应付课程申请的内容进行整理的.这次课程的实践对于今后的工作还是具有一定的启发意义. 关键词: 信号与系统,课程设计,课后 ...
最新文章
- Atitit 大json文件的结构化查看解决方案,高性能的jsonview attilax总结.docx
- print_r php encode,详细介绍PHP在调试时echo print() print_r() var_dump()的区别分享
- 异常:”未处理System.TypeLoadException“
- python100以内自然数之和_python—100以内素数之和 python123
- 乱码的根本原因是字节和字符的问题(转)
- webservice、WSDL简介
- java 车站分级问题_【NOIP2013 普及组】车站分级
- linux vim verilog,vim下好用的verilog插件:)( 更新) - [IC]
- ABP vNext微服务架构详细教程——简介
- VS2017社区版30天到期无法使用的激活方法
- 游戏服务器架构-设计模式之发布订阅模式
- iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式
- 解决SQL查询总是 超时已过期
- C#通用权限管理-程序安全检查,这些你一定要考虑到位
- 八个角最多可以把平面分成多少部分?_为什么越来越多的空间无主灯了?
- Flume Source
- ELK详解(八)——Logstash收集系统日志实战
- 基于mAppWidget实现手绘地图--索引DEMO
- 这三款提升工作效率的小工具,你都用过吗?
- mysql当周过生日的人_已知出生年月日,如何查询出本周过生日的人员?