<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post/323/</link>
<title><![CDATA[分析pw的通行证原理]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[开发应用]]></category>
<pubDate>Thu, 16 Aug 2007 16:04:12 +0000</pubDate> 
<guid>https://atim.cn/post/323/</guid> 
<description>
<![CDATA[ 
	其实这个很早以前也研究过<br/>但是由于没有记录下<br/>时间一长了就忘记了<br/><br/>实现程序主要有:require/passport_server.php,passport_client.php<br/><br/>每次登录或注册时,服务端都会包含require/passport_server.php<br/><br/>来看看passport_server.php里面有什么东西<br/><div class="code"><br/>&lt;?php<br/>!function_exists(&#039;readover&#039;) &amp;&amp; exit(&#039;Forbidden&#039;);<br/><br/>if(!$passport_ifopen &#124;&#124; $passport_type != &#039;server&#039;)&#123;<br/>&nbsp;&nbsp;Showmsg(&#039;passport_close&#039;);<br/>&#125;<br/><br/>!$forward &amp;&amp; $forward = $db_cmsurl;<br/>$clienturl=explode(&quot;&#92;n&quot;,str_replace(&quot;&#92;r&quot;,&quot;&quot;,$passport_urls));<br/><br/>//题外话，这段代码我看不出有什么特别，只觉得好像一无用处<br/>//因为passort_urls就是在设置服务器端的&lt;通行证客户端地址&gt;如果我有好几个，<br/>//他也只是取第一个不是空的就可以了。这样的话，完全是没有作用,<br/>//还不如直接定义一个客户端地址<br/>$jumpurl=&#039;&#039;;<br/>while(!$jumpurl)&#123;<br/>&nbsp;&nbsp;$jumpurl=array_shift($clienturl);<br/>&#125;<br/>if(!$jumpurl)&#123;<br/>&nbsp;&nbsp;Showmsg(&#039;undefined_action&#039;);<br/>&#125;<br/><br/>$userdb = array();<br/>foreach($clienturl as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;if($val &amp;&amp; $val != $jumpurl)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb&#91;&#039;url&#039;&#93; .= $userdb&#91;&#039;url&#039;&#93; ? &quot;,$val&quot; : $val;<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>$rt=$db-&gt;get_one(&quot;SELECT uid,username,password,email,rvrc,money,credit FROM pw_user WHERE uid=&#039;$winduid&#039;&quot;);<br/><br/>//这里就是接口所用到的其中一个重要数据<br/>//有占类似支付宝的接口<br/>//但显然是后其更改进的<br/>//看下面的注释<br/>$userdb&#91;&#039;uid&#039;&#93;&nbsp;&nbsp;&nbsp;&nbsp;= $rt&#91;&#039;uid&#039;&#93;;<br/>$userdb&#91;&#039;username&#039;&#93;&nbsp;&nbsp;= $rt&#91;&#039;username&#039;&#93;;<br/>$userdb&#91;&#039;password&#039;&#93;&nbsp;&nbsp;= $rt&#91;&#039;password&#039;&#93;;<br/>$userdb&#91;&#039;email&#039;&#93;&nbsp;&nbsp;= $rt&#91;&#039;email&#039;&#93;;<br/>$userdb&#91;&#039;rvrc&#039;&#93;&nbsp;&nbsp;&nbsp;&nbsp;= $rt&#91;&#039;rvrc&#039;&#93;;<br/>$userdb&#91;&#039;money&#039;&#93;&nbsp;&nbsp;= $rt&#91;&#039;money&#039;&#93;;<br/>$userdb&#91;&#039;credit&#039;&#93;&nbsp;&nbsp;= $rt&#91;&#039;credit&#039;&#93;;<br/>$userdb&#91;&#039;time&#039;&#93;&nbsp;&nbsp;&nbsp;&nbsp;= $timestamp;<br/>$userdb&#91;&#039;cktime&#039;&#93;&nbsp;&nbsp;= $cktime;<br/><br/>//看这里是将数据转成字符串<br/>$userdb_encode=&#039;&#039;;<br/>foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;$userdb_encode .= $userdb_encode ? &quot;&amp;$key=$val&quot; : &quot;$key=$val&quot;;<br/>&#125;<br/>//这里就是跟支付宝不同的地方，支付宝在这里是公开的。而这里使用了StrCode加密。<br/>//相对来说是比支付宝要安全很多。但也可能出现错误，因为strcode可能会出显“=”号<br/>//现在直接用str_replace换掉“=”号，这种做法不可取。因为这样做为程序造成一个不稳定因素<br/>//这应该是lyn经常会说pw灵义事件之一了<br/>//其实这个str_replace 是完全没有必要的。因为下面使用了rawurlencode<br/><br/>$db_hash=$passport_key;<br/>$userdb_encode=str_replace(&#039;=&#039;,&#039;&#039;,StrCode($userdb_encode));<br/><br/>if($action==&#039;login&#039;)&#123;<br/><br/>&nbsp;&nbsp;//verify，就是跟支付宝差不多的东西。确保数据没有变更改过。<br/>&nbsp;&nbsp;$verify = md5(&quot;login$userdb_encode$forward$passport_key&quot;);<br/><br/>&nbsp;&nbsp;//主要提供三个变量到客户端去就可以完成服务端的工作了。<br/>&nbsp;&nbsp;ObHeader(&quot;$jumpurl/passport_client.php?action=login&amp;userdb=&quot;.rawurlencode($userdb_encode).&quot;&amp;forward=&quot;.rawurlencode($forward).&quot;&amp;verify=&quot;.rawurlencode($verify));<br/>&#125;elseif($action==&#039;quit&#039;)&#123;<br/>&nbsp;&nbsp;$verify = md5(&quot;quit$userdb_encode$forward$passport_key&quot;);<br/>&nbsp;&nbsp;ObHeader(&quot;$jumpurl/passport_client.php?action=quit&amp;userdb=&quot;.rawurlencode($userdb_encode).&quot;&amp;forward=&quot;.rawurlencode($forward).&quot;&amp;verify=&quot;.rawurlencode($verify));<br/>&#125;<br/>?&gt;<br/></div><br/><br/>当客户端接收到服务器提交的三个变量后<br/><div class="code"><br/>&lt;?php<br/>require_once(&#039;global.php&#039;);<br/>require_once(R_P.&#039;mod/checkpass_mod.php&#039;);<br/><br/>if(!$passport_ifopen &#124;&#124; $passport_type != &#039;client&#039;)&#123;<br/>&nbsp;&nbsp;exit(&quot;Passport closed(VeryCMS)&quot;);<br/>&#125;<br/><br/>if(md5($action.$userdb.$forward.$passport_key) != $verify)&#123;<br/>&nbsp;&nbsp;exit(&#039;Illegal request(VeryCMS)&#039;);<br/>&#125;<br/>$_db_hash=$db_hash;<br/><br/>//还原用户数据<br/>$db_hash=$passport_key;<br/>parse_str(StrCode($userdb,&#039;DECODE&#039;),$userdb);<br/><br/>if($action==&#039;login&#039;)&#123;<br/>&nbsp;&nbsp;foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb&#91;$key&#93; = addslashes($val);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if(!$userdb&#91;&#039;time&#039;&#93; &#124;&#124; !$userdb&#91;&#039;username&#039;&#93; &#124;&#124; !$userdb&#91;&#039;password&#039;&#93; &#124;&#124; !$userdb&#91;&#039;email&#039;&#93;)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit(&quot;Lack of parameters(VeryCMS)&quot;);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if($timestamp-$userdb&#91;&#039;time&#039;&#93;&gt;3600)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit(&#039;Passport request expired(VeryCMS)&#039;);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//题外话：这里里verycms的一段特殊接口，不知道为什么会另外写一般关于verycms的接口，而不是使用一个统一的接口，<br/>&nbsp;&nbsp;//如果以后还其它的程序是不是还要另外加一段程序？<br/>&nbsp;&nbsp;//verycms passport group right<br/>&nbsp;&nbsp;$groupright=1;<br/>&nbsp;&nbsp;include_once(D_P.&#039;data/cache/passport.php&#039;);<br/>&nbsp;&nbsp;if($ps_combine)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;select_db($ps_bbsdbname);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$PW = $ps_bbspre;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$gp = $db-&gt;get_one(&quot;SELECT hk_value FROM pw_hack WHERE hk_name=&#039;bg_groups&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$rt = $db-&gt;get_one(&quot;SELECT groupid,memberid FROM pw_members WHERE uid=&#039;$userdb&#91;uid&#93;&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Add_S($rt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Add_S($gp);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$groupid = $rt&#91;&#039;groupid&#039;&#93; == &#039;-1&#039; ? $rt&#91;&#039;memberid&#039;&#93; : $rt&#91;&#039;groupid&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($gp&#91;&#039;hk_value&#039;&#93; &amp;&amp; strpos($gp&#91;&#039;hk_value&#039;&#93;,&quot;,$groupid,&quot;)===false)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$groupright=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$forward .= &quot;/?nogroupright&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;include (D_P.&#039;data/sql_config.php&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;select_db($dbname);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;//verycms passport group right<br/><br/>&nbsp;&nbsp;if($groupright)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$user_field = array(&#039;username&#039;,&#039;password&#039;,&#039;email&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$credit_field = array(&#039;rvrc&#039;,&#039;money&#039;,&#039;credit&#039;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$sql=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach($user_field as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql .= &#039;,&#039;.$val;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach($credit_field as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql .= &#039;,&#039;.$val;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//先看查是否有这个用户，使用的是用户名作关联，这个方案是不错，毕竟不是所有论坛程序都会有uid，<br/>&nbsp;&nbsp;&nbsp;&nbsp;//pw的另一套程序ofstar<br/>&nbsp;&nbsp;&nbsp;&nbsp;$rt=$db-&gt;get_one(&quot;SELECT uid $sql FROM pw_user WHERE username=&#039;$userdb&#91;username&#93;&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($rt)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($rt&#91;$key&#93; != $val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(in_array($key,$user_field))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;&nbsp;.= $sql ? &quot;,$key=&#039;$val&#039;&quot; : &quot;$key=&#039;$val&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;elseif(in_array($key,$credit_field) &amp;&amp; strpos(&quot;,$passport_credit,&quot;,&quot;,$key,&quot;)!==false)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql .= $sql ? &quot;,$key=&#039;$val&#039;&quot; : &quot;$key=&#039;$val&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($sql)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;update(&quot;UPDATE pw_user SET $sql WHERE uid=&#039;$rt&#91;uid&#93;&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;update(&quot;UPDATE pw_domain SET bbsuid=&#039;$userdb&#91;uid&#93;&#039;,username=&#039;$userdb&#91;username&#93;&#039; WHERE uid=&#039;$rt&#91;uid&#93;&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$winduid = $rt&#91;&#039;uid&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql1=$sql2=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(in_array($key,$user_field))&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql1 .= $sql1 ? &#039;,&#039;.$key&nbsp;&nbsp;: $key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql2 .= $sql2 ? &quot;,&#039;$val&#039;&quot; : &quot;&#039;$val&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;elseif(in_array($key,$credit_field) &amp;&amp; strpos(&quot;,$passport_credit,&quot;,&quot;,$key,&quot;)!==false)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql1 .= $sql1 ? &#039;,&#039;.$key&nbsp;&nbsp;: $key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql2 .= $sql2 ? &quot;,&#039;$val&#039;&quot; : &quot;&#039;$val&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//刚开始我在想，论坛的用户是怎么在blog里直接建一个帐呢？原来就是用Replace关键字来建的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//下面三个$db-&gt;update都是会对数据作出更改或添加。可是我很奇怪。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为什么在register.php文件里会对以下的数据进行过滤，而在这里却一点都不过滤就直接使用呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//是不是很相信，使用pwblog程序的人只会使用pwfourm呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//但就算都是用pwfourm，那用户使用中文呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有点不负责任的感觉。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;update(&quot;REPLACE INTO pw_user($sql1,groupid,memberid,gender,regdate,signchange) VALUES($sql2,&#039;-1&#039;,&#039;8&#039;,&#039;0&#039;,&#039;$timestamp&#039;,&#039;1&#039;)&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$winduid = $db-&gt;insert_id();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;update(&quot;REPLACE INTO pw_domain(uid,bbsuid,username,blogname) VALUES (&#039;$winduid&#039;,&#039;$userdb&#91;uid&#93;&#039;,&#039;$userdb&#91;username&#93;&#039;,&#039;$userdb&#91;username&#93;&#039;)&quot;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$db-&gt;update(&quot;UPDATE pw_bloginfo SET newmember=&#039;$userdb&#91;username&#93;&#039;,totalmember=totalmember+1 WHERE id=&#039;1&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$db_hash=$_db_hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$windpwd = confuse($userdb&#91;&#039;password&#039;&#93;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Cookie(&quot;bloguser&quot;,StrCode($winduid.&quot;&#92;t&quot;.$windpwd),$userdb&#91;&#039;cktime&#039;&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Cookie(&#039;lastvisit&#039;,&#039;&#039;,0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Loginipwrite();<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($userdb&#91;&#039;url&#039;&#93;)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$clienturl = explode(&#039;,&#039;,$userdb&#91;&#039;url&#039;&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$jumpurl=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!$jumpurl)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$jumpurl=array_shift($clienturl);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$userdb&#91;&#039;url&#039;&#93; = implode(&#039;,&#039;,$clienturl);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if($jumpurl)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode .= $userdb_encode ? &quot;&amp;$key=$val&quot; : &quot;$key=$val&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$db_hash=$passport_key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode=str_replace(&#039;=&#039;,&#039;&#039;,StrCode($userdb_encode));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$verify = md5(&quot;login$userdb_encode$forward$passport_key&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObHeader(&quot;$jumpurl/passport_client.php?action=login&amp;userdb=&quot;.rawurlencode($userdb_encode).&quot;&amp;forward=&quot;.rawurlencode($forward).&quot;&amp;verify=&quot;.rawurlencode($verify));<br/>&nbsp;&nbsp;&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObHeader($forward ? $forward : $passport_serverurl);<br/>&nbsp;&nbsp;&#125;<br/>&#125;elseif($action==&#039;quit&#039;)&#123;<br/>&nbsp;&nbsp;$db_hash=$_db_hash;<br/>&nbsp;&nbsp;Loginout();<br/><br/>&nbsp;&nbsp;if($userdb&#91;&#039;url&#039;&#93;)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$clienturl = explode(&#039;,&#039;,$userdb&#91;&#039;url&#039;&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$jumpurl=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(!$jumpurl)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$jumpurl=array_shift($clienturl);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb&#91;&#039;url&#039;&#93; = implode(&#039;,&#039;,$clienturl);<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if($jumpurl)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode=&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach($userdb as $key=&gt;$val)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode .= $userdb_encode ? &quot;&amp;$key=$val&quot; : &quot;$key=$val&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$db_hash=$passport_key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$userdb_encode=str_replace(&#039;=&#039;,&#039;&#039;,StrCode($userdb_encode));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$verify = md5(&quot;quit$userdb_encode$forward$passport_key&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObHeader(&quot;$jumpurl/passport_client.php?action=quit&amp;userdb=&quot;.rawurlencode($userdb_encode).&quot;&amp;forward=&quot;.rawurlencode($forward).&quot;&amp;verify=&quot;.rawurlencode($verify));<br/>&nbsp;&nbsp;&#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObHeader($forward ? $forward : $passport_serverurl);<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>function Loginipwrite($winduid)&#123;<br/>&nbsp;&nbsp;global $db,$timestamp,$onlineip;<br/><br/>&nbsp;&nbsp;$logininfo=&quot;$onlineip&#124;$timestamp&#124;6&quot;;<br/>&nbsp;&nbsp;$db-&gt;update(&quot;UPDATE pw_user SET lastvisit=thisvisit,thisvisit=&#039;$timestamp&#039;,onlineip=&#039;$logininfo&#039; WHERE uid=&#039;$winduid&#039;&quot;);<br/>&#125;<br/>?&gt;<br/></div><br/>
]]>
</description>
</item><item>
<link>https://atim.cn/post/323/#blogcomment496</link>
<title><![CDATA[[评论] 分析pw的通行证原理]]></title> 
<author>hargreaves &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 17 Aug 2007 04:34:49 +0000</pubDate> 
<guid>https://atim.cn/post/323/#blogcomment496</guid> 
<description>
<![CDATA[ 
	呵呵，php就玩过几天就没玩了<br/>感觉没微软的东西方便
]]>
</description>
</item><item>
<link>https://atim.cn/post/323/#blogcomment499</link>
<title><![CDATA[[评论] 分析pw的通行证原理]]></title> 
<author>lee &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 18 Aug 2007 06:57:12 +0000</pubDate> 
<guid>https://atim.cn/post/323/#blogcomment499</guid> 
<description>
<![CDATA[ 
	支持。net，打倒免费软件
]]>
</description>
</item><item>
<link>https://atim.cn/post/323/#blogcomment500</link>
<title><![CDATA[[评论] 分析pw的通行证原理]]></title> 
<author>Ella &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 18 Aug 2007 18:31:50 +0000</pubDate> 
<guid>https://atim.cn/post/323/#blogcomment500</guid> 
<description>
<![CDATA[ 
	哦
]]>
</description>
</item><item>
<link>https://atim.cn/post/323/#blogcomment501</link>
<title><![CDATA[[评论] 分析pw的通行证原理]]></title> 
<author>hargreaves &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 18 Aug 2007 18:50:17 +0000</pubDate> 
<guid>https://atim.cn/post/323/#blogcomment501</guid> 
<description>
<![CDATA[ 
	呵呵<br/>asp,asp.net也是做web的吧<br/>怎么会没有可比之处呢
]]>
</description>
</item>
</channel>
</rss>