- 当用户访问a系统时。
- 先行判断$_COOKIE['ticket']是否存在。
- 如果不存在或者ticket不正确(注:ticket是先加密过的)时,直接跳到sso.yxh.com(header("location:http://sso.yxh.com?redirect_url=http://a.yxh.com")单点登录系统,进行登录。
- 登录成功后,生成ticket存储到Cookie中,相应的也要存储在服务器端(存储在redis,或者session中)。
- 然后跳回到a.yxh.com,再校验ticket,校验成功,则登录成功。
- 如果用户需要登出,则需要清除cookie,setcookie("ticket", null, time() - 1000, "/", "yxh.com");
- 登出后,其他系统下的ticket也相继被清除、其他系统也相应登出。
OOP的核心思想 封装 、继承 、 多态
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
- 抽象类不能被实例化
- 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法
- 一旦类包含了abstract方法,则这个类必须声明为abstract
- 抽象方法不能有函数体
- 如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法.(除非它自己也声明为抽象类)
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
- 不能去实例化一个接口
- 接口中的所有方法,都不能有方法体
- 一个类可以去实现多个接口
class 类名 implements 接口1,接口2{ }
- 接口中可以有属性,但是必须是常量,并且是public
interface iUsb{ const A=90; } iUsb::A; //调用
- 接口的方法是public 【默认就是public 】 ,不能是 protected 和private