<?phpfunction page_redirect($redirect_to){    if (headers_sent()){ // Use JavaScript to redirect if content has been previously sent (not recommended, but safe)        echo ‘<script language=”JavaScript” type=”text/javascript”>window.location=”;        echo $redirect_to;        echo ”;</script>’;    }else{    // Default Header Redirect        header(‘Location: ’ . $redirect_to);    }}?>

从http://openid.net/specs/openid-authentication-2_0-11.html 分析的流程+用例图

一、Initiation
RP提供登录窗体,使最终用户可以进行登录;输入框的名字约定为“openid_identifier” 以便于最终用户使用的代理可以进行自动完成。
二、Normalization
RP对最终用户提供的uid进行格式补全,默认使用http协议
三、Discovery
RP从用户提供的uid中发现OP的位置和CID;首先尝试使用xri协议,其次使用yadis进行发现,若都没有匹配则使用基本的html方式进行发现。
四、Establishing Associations
RP尝试向OP请求交互过程中使用的密钥,并在以后的交互过程用使用(HMAC-SHA1或HMAC-SHA256)形式进行加密传输。
五、Requesting Authentication
RP组织OP Url 并通知最终用户使用的UA转向OP发出验证身份的请求;传输过程中根据OP url中指定的协议,使用http或https进行交互。
XX、Authentication
OP对最终用户的身份进行验证,标准中没有强制使用哪种方式进行验证,由OP自行选择。
六、Responding to Authentication Requests
OP将验证结果经由最终用户的UA,转向到RP。
七、Verifying Assertions
RP对最终用户的UA的请求中携带的数据向OP方进行验证。