<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Web开发</title><link>http://blog.vckbase.com/wangjun/category/23.html</link><description>ASP,ASP.NET,PHP...</description><managingEditor>王骏的BLOG</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>王骏的BLOG</dc:creator><title>UCenter info: MySQL Query Error (UCenter一个错误的解决)</title><link>http://blog.vckbase.com/wangjun/archive/2009/12/17/40377.html</link><pubDate>Thu, 17 Dec 2009 08:22:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/12/17/40377.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/40377.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/12/17/40377.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/40377.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/40377.html</trackback:ping><description>&lt;P&gt;错误信息：&lt;BR&gt;UCenter info: MySQL Query Error&lt;BR&gt;SQL:SELECT * FROM [Table]notelist WHERE closed='0' AND app2&amp;lt;'1' AND app2&amp;gt;'-5' LIMIT 1&lt;BR&gt;Error:Unknown column 'app2' in 'where clause'&lt;BR&gt;Errno:1054&lt;/P&gt;
&lt;P&gt;错误解决：&lt;BR&gt;uc_notelist缺少app2字段，app2对应于"应用2",在创建应用的时候ucenter需要修改uc_notelist添加对应的字段。&lt;BR&gt;连接到mysql,show columns from uc_notelist; 发现果然没有app2字段，说明ucenter并没有成功创建该字段,&lt;/P&gt;
&lt;P&gt;下载checkappid.php到网站并运行，出现如下错误：&lt;BR&gt;Error:ALTER command denied to user &lt;A href="mailto:'xxxx'@'localhost'"&gt;'xxxx'@'localhost'&lt;/A&gt; for table 'uc_notelist'&lt;BR&gt;Errno:1142&lt;BR&gt;SQL::ALTER TABLE uc_notelist ADD COLUMN app1 tinyint NOT NULL&lt;/P&gt;
&lt;P&gt;说明xxxx用户没有ALTER权限。&lt;BR&gt;到mysql中，&lt;BR&gt;mysql&amp;gt; SELECT alter_priv FROM user WHERE&amp;nbsp; User = 'xxxx';&lt;BR&gt;发现alter_priv = 'N',果然没有权限。&lt;BR&gt;修改权限：&lt;BR&gt;mysql&amp;gt; UPDATE user SET alter_priv='Y' WHERE User = 'xxxx';&lt;BR&gt;mysql&amp;gt; flush privileges;&lt;/P&gt;
&lt;P&gt;重新运行checkappid.php出现：&lt;BR&gt;PHP Warning: unlink(c:\wwwroot\checkappid.php): Permission denied in c:\wwwroot\checkappid.php on line 31 &lt;BR&gt;说明checkappid.php修改appid已经成功，我们手工删除checkappid.php即可。&lt;/P&gt;
&lt;P&gt;mysql&amp;gt; show columns from uc_notelist;&lt;BR&gt;各个应用的appx都已创建好。&lt;BR&gt;&lt;BR&gt;附件：&lt;A href="http://blog.vckbase.com/Files/wangjun/checkappid.rar"&gt;http://blog.vckbase.com/Files/wangjun/checkappid.rar&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;本文由okbase.net原创，转载请注明出处！&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/40377.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>PHP运行时出现FastCGI Error</title><link>http://blog.vckbase.com/wangjun/archive/2009/12/13/40265.html</link><pubDate>Sun, 13 Dec 2009 12:46:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/12/13/40265.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/40265.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/12/13/40265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/40265.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/40265.html</trackback:ping><description>&lt;P&gt;错误信息：&lt;BR&gt;FastCGI Error&lt;BR&gt;The FastCGI Handler was unable to process the request. &lt;BR&gt;--------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;Error Details:&lt;/P&gt;
&lt;P&gt;The FastCGI process exited unexpectedly &lt;BR&gt;Error Number: -2147467259 (0x80004005). &lt;BR&gt;Error Description: 未指定的错误 &lt;BR&gt;HTTP Error 500 - Server Error.&lt;BR&gt;Internet Information Services (IIS)&lt;/P&gt;
&lt;P&gt;解决：&lt;BR&gt;检查php.ini的Dynamic Extensions内容，看是否每一行extension=xxx.dll中的dll是否真实存在，如果不存在则注释掉。&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/40265.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>Windows 2003下FastCGI+PHP5的安装教程(转载)</title><link>http://blog.vckbase.com/wangjun/archive/2009/12/07/40067.html</link><pubDate>Mon, 07 Dec 2009 00:47:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/12/07/40067.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/40067.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/12/07/40067.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/40067.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/40067.html</trackback:ping><description>原文请见：&lt;A href="http://hi.baidu.com/honfei/blog/item/767c4b1b90f787dfad6e7514.html"&gt;http://hi.baidu.com/honfei/blog/item/767c4b1b90f787dfad6e7514.html&lt;/A&gt;&lt;A href="http://hi.baidu.com/honfei/blog/item/767c4b1b90f787dfad6e7514.htmlmicrosoft"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/A&gt;Microsoft开始大力支持php了，Zend公司和微软公司改善了微软的IIS Web服务器的FastCGI模块，它将提高PHP的性能。这个模块免费提供给IIS6和IIS7的用户，可以运行在Windows Server 2003上，并将作为vista和即将推出的Windows Server 2008的一部分。 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 近日，微软和PHP社区经过一年的努力，通过FastCGI扩展，终于能让PHP在IIS 7.0上执行效率大增。而此前，PHP曾经是IIS心口上的稳痛，PHP在IIS的扩展速度一直跟不上其他服务端。而免费的FastCGI扩展的出现，使得PHP一越成为Windows平台之上的&amp;#8220;一等公民&amp;#8221;。&lt;BR&gt;。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在网上很多IIS7下配置PHP的教程还停顿在IIS6的配置阶段，还在用isapi模式，如果是这样，还是直接用IIS6好了，不然IIS7再好，也是浪费。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;综合网上教程，我总结修改出以下内容，给有需要的朋友参考：&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;环境：&lt;/STRONG&gt;&lt;BR&gt;操作系统:Windows 2003 Server&lt;BR&gt;PHP版本:PHP5.26&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1.安装FastCGI For IIS6&lt;/STRONG&gt;&lt;BR&gt;到微软官方网站&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&amp;amp;displaylang=en&lt;/A&gt;&lt;BR&gt;下载fcgisetup32.msi,下载之后,双击运行进行安装.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2.安装PHP5.26&lt;/STRONG&gt;&lt;BR&gt;到&lt;A href="http://www.php.net/"&gt;http://www.php.net&lt;/A&gt;下载.zip格式的版本,下载后解压至&lt;FONT color=#ff00ff&gt;D:\Program Files\php5&lt;/FONT&gt;目录,&lt;FONT color=#ff0000&gt;并给"&lt;FONT color=#073763&gt;启动IIS进程帐户&lt;/FONT&gt;"赋予'读取'和'运行'权限.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3.注册PHP到FastCGI&lt;/STRONG&gt;&lt;BR&gt;在命令行下运行&lt;BR&gt;&lt;FONT color=#0000ff&gt;cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"&lt;FONT color=#ff00ff&gt;D:\Program Files\php5\php-cgi.exe&lt;/FONT&gt;"&lt;BR&gt;&lt;/FONT&gt;fcgiconfig.js 默认存放目录是:&lt;FONT color=#0000ff&gt;C:\WINDOWS\system32\inetsrv&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4.配置php.ini&lt;/STRONG&gt;&lt;BR&gt;将&lt;FONT color=#ff00ff&gt;D:\Program Files\php5\&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;php.ini-recommended&lt;/FONT&gt;重命名为&lt;FONT color=#0000ff&gt;php.ini&lt;/FONT&gt; (&lt;FONT color=#ff0000&gt;注意：无需拷贝到C:\windows\&lt;/FONT&gt;)&lt;BR&gt;打开&lt;FONT color=#ff00ff&gt;D:\Program Files\php5\php.ini&lt;/FONT&gt;，修改：&lt;BR&gt;&lt;FONT color=#0000ff&gt;extension_dir = "&lt;/FONT&gt;&lt;FONT color=#ff00ff&gt;D:\Program Files\php5\ext&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;fastcgi.impersonate = 1&lt;BR&gt;cgi.fix_pathinfo=1&lt;BR&gt;cgi.force_redirect = 0&lt;BR&gt;extension=php_dba.dll &lt;FONT color=#999999&gt;去掉前分号&lt;BR&gt;&lt;/FONT&gt;extension=php_dbase.dll &lt;FONT color=#999999&gt;去掉前分号&lt;BR&gt;&lt;/FONT&gt;extension=php_gd2.dll &lt;FONT color=#999999&gt;去掉前分号&lt;BR&gt;&lt;/FONT&gt;extension=php_mysql.dll &lt;FONT color=#999999&gt;去掉前分号，开启mysql支持&lt;/FONT&gt;&lt;BR&gt;short_open_tag = Off &lt;/FONT&gt;&lt;FONT color=#999999&gt;改为 &lt;FONT color=#ff00ff&gt;On&lt;/FONT&gt;，开启&amp;lt;??&amp;gt;短标记&lt;BR&gt;&lt;/FONT&gt;(&lt;FONT color=#ff0000&gt;注意：以上dll文件无需拷贝到C:\windows\system32&lt;/FONT&gt;)&lt;BR&gt;其它根据实际需要对php.ini进行设置修改&lt;BR&gt;复制D:\Program Files\php5\&lt;FONT color=#0000ff&gt;libmcrypt.dll&lt;/FONT&gt;和&lt;FONT color=#0000ff&gt;libmysql.dll&lt;/FONT&gt; 到&lt;FONT color=#ff00ff&gt;D:\Program Files\php5\ext&lt;/FONT&gt;目录 (&lt;FONT color=#ff0000&gt;注意：无需拷贝到C:\windows\system32&lt;/FONT&gt;)&lt;BR&gt;然后执行：&lt;BR&gt;&lt;FONT color=#0000ff&gt;cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:300&lt;BR&gt;cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:800&lt;BR&gt;&lt;/FONT&gt;以上两项设置最大池和响应连接数，可以根据运行机器的硬件配置、使用情况修改&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5.添加/编辑扩展名映射 &lt;/STRONG&gt;&lt;BR&gt;打开IIS管理器-&amp;gt;网站-&amp;gt;主目录-&amp;gt;配置－&amp;gt;映射-&amp;gt;添加: &lt;FONT color=#ffffff&gt;来自:http://www.cnlive.net&lt;/FONT&gt;&lt;BR&gt;可执行文件：&lt;FONT color=#0000ff&gt;C:\WINDOWS\system32\inetsrv\fcgiext.dll&lt;BR&gt;&lt;/FONT&gt;扩展名：.&lt;FONT color=#0000ff&gt;php&lt;/FONT&gt;&lt;BR&gt;动作，限制为：&lt;FONT color=#0000ff&gt;GET,HEAD,POST&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6.添加系统环境变量&lt;/STRONG&gt;&lt;BR&gt;(1)在桌面我的电脑图标点击右键-&amp;gt;属性-&amp;gt;高级-&amp;gt;环境变量-&amp;gt;系统变量中找到Path，在值的最后加上&lt;FONT color=#9900ff&gt;D:\Program Files\php5&lt;/FONT&gt;,修改后是这样的：&lt;BR&gt;变量名：&lt;FONT color=#ff00ff&gt;Path&lt;BR&gt;&lt;/FONT&gt;变量值：%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;&lt;FONT color=#ff00ff&gt;D:\Program Files\php5&lt;BR&gt;&lt;/FONT&gt;(2)点新建再添加一个变量名&lt;FONT color=#ff00ff&gt;PHPRC&lt;/FONT&gt;值为&lt;FONT color=#ff00ff&gt;D:\Program Files\php5&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7.最后一步&lt;/STRONG&gt;&lt;BR&gt;最好是重起电脑，重起IIS ,开始-&amp;gt;运行-&amp;gt;CMD-&amp;gt;IISRESET /RESTART ,待重起完后就完成所有配置了.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;其它:&lt;/STRONG&gt;&lt;BR&gt;&lt;FONT color=#666666&gt;如果重启IIS后,打开测试页出现如下提示:&lt;BR&gt;FastCGI Error&lt;BR&gt;The FastCGI Handler was unable to process the request. &lt;BR&gt;--------------------------------------------------------------------------------&lt;BR&gt;Error Details:&lt;BR&gt;Error Number: 5 (0x80070005). &lt;BR&gt;Error Description: 拒绝访问。 &lt;BR&gt;HTTP Error 500 - Server Error.&lt;BR&gt;Internet Information Services (IIS)&lt;BR&gt;这个错误是由于在解压PHP之后,没有对启动IIS进程帐户(账户名以IWAW_开头)赋予该目录的"读取"和"运行"权限.修改文件夹安全属性,问题解决.&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/40067.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>ASP.NET大文件上传(.NET 3.5 VS2008下编译通过)</title><link>http://blog.vckbase.com/wangjun/archive/2009/10/23/39585.html</link><pubDate>Fri, 23 Oct 2009 08:40:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/10/23/39585.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/39585.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/10/23/39585.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/39585.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/39585.html</trackback:ping><description>源代码：&lt;A href="http://blog.vckbase.com/Files/wangjun/BigFileUpload.rar"&gt;http://blog.vckbase.com/Files/wangjun/BigFileUpload.rar&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;简明使用方法(详见Default.aspx.cs)：&lt;BR&gt;1)Web.config中&amp;lt;httpModules&amp;gt;添加&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="BigFileUploadModuleHandle " type="HelpSoft.BigFileUploadModuleHandle,BigFileUploadHandle" /&amp;gt;&lt;BR&gt;&lt;BR&gt;2) 指定上传临时目录&lt;BR&gt;UploadContext context = UploadContextFactory.InitUploadContext(this, @"e:\temp"); &lt;BR&gt;&lt;BR&gt;3)保存&lt;BR&gt;UploadContext context = UploadContextFactory.GetUploadContext();&lt;BR&gt;if ((context != null) &amp;amp;&amp;amp; (context.Status == uploadStatus.Complete))&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //context.SaveFile(file1.ClientID, Request.MapPath("/myupload/"));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.SaveFile(file1.ClientID, @"e:\temp\upload\"); //后面必须有:"\"&lt;BR&gt;}&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/39585.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>Windows2003(IIS6)环境下Drupal安装小记</title><link>http://blog.vckbase.com/wangjun/archive/2009/08/26/38195.html</link><pubDate>Wed, 26 Aug 2009 14:06:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/08/26/38195.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/38195.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/08/26/38195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/38195.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/38195.html</trackback:ping><description>&lt;P&gt;Drupal是一个比较轻巧的CMS系统，安装过程基本上是顺利的，有一些注意点：&lt;BR&gt;1)sites\default\default.settings.php 需改名为 settings.php&lt;BR&gt;2)如果出现如下错误&lt;BR&gt;Operations on Unicode strings are emulated on a best-effort basis. Install the PHP mbstring extension for improved Unicode support. (Currently using Unicode library Standard PHP)&lt;/P&gt;
&lt;P&gt;将php.ini里的 extension=php_mbstring.dll 启用，并保证php_mbstring.dll存在于extension_dir指向的目录里。&lt;/P&gt;
&lt;P&gt;3) Database configuration输入后还是回到了Database configuration页面&lt;BR&gt;修改settings.php&lt;BR&gt;$db_url = 'mysql://username:password@localhost/databasename';&lt;BR&gt;填入正确的数据库配置&lt;BR&gt;&lt;BR&gt;4)Database configuration中的内容输入是没有起作用的，如果需要修改表前缀，也需要在settings.php里修改：$db_prefix = 'drupal_';&lt;/P&gt;
&lt;P&gt;5)Url重写实现页面静态化&lt;BR&gt;用的是ISAPI_Rewrite&lt;BR&gt;&lt;BR&gt;修改settings.php文件&lt;BR&gt;在文件的最后面加上&lt;BR&gt;$conf['clean_url']=1;&lt;BR&gt;&lt;BR&gt;修改 httpd.ini文件,添加如下规则&lt;BR&gt;RewriteRule (.*.gif|.*.png|.*.jpg|.*.pdf|.*.js|.*.css) $1 [I,L]&lt;BR&gt;RewriteRule /index.php.* $0 [I,L]&lt;BR&gt;RewriteRule /(.*)\?(.*) /index.php\?q=$1&amp;amp;$2 [I,L]&lt;BR&gt;RewriteRule /(.*) /index.php\?q=$1 [I,L]&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/38195.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>PHPCMS的小BUG</title><link>http://blog.vckbase.com/wangjun/archive/2009/08/10/38083.html</link><pubDate>Mon, 10 Aug 2009 02:32:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/08/10/38083.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/38083.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/08/10/38083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/38083.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/38083.html</trackback:ping><description>http.class.php中的get_status没有考虑HTTP/1.0的情况，&lt;BR&gt;需要做如下修改：&lt;BR&gt;&amp;nbsp;function get_status()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;preg_match("|^HTTP/1.[0-1] ([0-9]{3}) (.*)|", $this-&amp;gt;header, $m);&lt;BR&gt;&amp;nbsp;&amp;nbsp;return array($m[1], $m[2]);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/38083.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>ASP.NET登录整合到SupeSite后的跳转</title><link>http://blog.vckbase.com/wangjun/archive/2009/08/06/38053.html</link><pubDate>Thu, 06 Aug 2009 03:15:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/08/06/38053.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/38053.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/08/06/38053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/38053.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/38053.html</trackback:ping><description>ASP.NET里&lt;BR&gt;检测到未登录&lt;BR&gt;Response.Redirect("http://127.0.0.1/?action-login-ref-" + HttpUtility.UrlEncode(Request.Url.ToString().Replace("/", "|")));&lt;BR&gt;&lt;BR&gt;SupeSite里的login.php：&lt;BR&gt;if(!empty($_COOKIE['_refer'])) {&lt;BR&gt;&amp;nbsp;$refer = $_COOKIE['_refer'];&lt;BR&gt;} else {&lt;BR&gt;&amp;nbsp;$refer = S_URL_ALL;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;修改为：&lt;BR&gt;$refer = $_SGET['ref'];&lt;BR&gt;if(!empty($refer)) {&lt;BR&gt;&amp;nbsp; $refer = str_replace("|", "/", $refer);&lt;BR&gt;}&lt;BR&gt;else if(!empty($_COOKIE['_refer'])) {&lt;BR&gt;&amp;nbsp;$refer = $_COOKIE['_refer'];&lt;BR&gt;} else {&lt;BR&gt;&amp;nbsp;$refer = S_URL_ALL;&lt;BR&gt;}&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/38053.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>UCenter整合ASP.NET应用</title><link>http://blog.vckbase.com/wangjun/archive/2009/08/04/38041.html</link><pubDate>Tue, 04 Aug 2009 06:56:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/08/04/38041.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/38041.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/08/04/38041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/38041.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/38041.html</trackback:ping><description>&lt;P&gt;一些备忘&lt;BR&gt;&lt;BR&gt;应用测试时的参数：action=test&amp;amp;time=1249356496&lt;BR&gt;登录参数：action=synlogin&amp;amp;username=admin&amp;amp;uid=1&amp;amp;password=2807dabf6abff7792b12df923c035ceb&amp;amp;time=1249356391&lt;BR&gt;退出参数：action=synlogout&amp;amp;time=1249356363&lt;BR&gt;&lt;BR&gt;编写uc.aspx作为接口：&lt;BR&gt;Request["code"]取得code进行Decode,然后得到各个参数，例如：action,uid,time等，对不同的action实现相应的处理例程。&lt;BR&gt;&lt;BR&gt;对于1.5版本的UCenter需要将ucenter\control\user.php修改一下&lt;BR&gt;function onsynlogin() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;$this-&amp;gt;init_input();&lt;BR&gt;&amp;nbsp;&amp;nbsp;$uid = $this-&amp;gt;input('uid');&lt;BR&gt;&amp;nbsp;&amp;nbsp;if($this-&amp;gt;app['synlogin']) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($this-&amp;gt;user = $_ENV['user']-&amp;gt;get_user_by_uid($uid)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$synstr = '';&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($this-&amp;gt;cache['apps'] as $appid =&amp;gt; $app) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($app['synlogin'] &amp;amp;&amp;amp; $app['appid'] != $this-&amp;gt;app['appid']) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff3300&gt;$apifilename = isset($app['apifilename']) &amp;amp;&amp;amp; $app['apifilename'] ? $app['apifilename'] : 'uc.php';&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$synstr .= '&amp;lt;script type="text/javascript" src="'.$app['url'].'/api/'.$apifilename.'?time='.$this-&amp;gt;time.'&amp;amp;code='.urlencode($this-&amp;gt;authcode('action=synlogin&amp;amp;username='.$this-&amp;gt;user['username'].'&amp;amp;uid='.$this-&amp;gt;user['uid'].'&amp;amp;password='.$this-&amp;gt;user['password']."&amp;amp;time=".$this-&amp;gt;time, 'ENCODE', $app['authkey'])).'" reload="1"&amp;gt;&amp;lt;/script&amp;gt;';&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $synstr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;return '';&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;function onsynlogout() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;$this-&amp;gt;init_input();&lt;BR&gt;&amp;nbsp;&amp;nbsp;if($this-&amp;gt;app['synlogin']) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$synstr = '';&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($this-&amp;gt;cache['apps'] as $appid =&amp;gt; $app) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($app['synlogin'] &amp;amp;&amp;amp; $app['appid'] != $this-&amp;gt;app['appid']) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff3300&gt;$apifilename = isset($app['apifilename']) &amp;amp;&amp;amp; $app['apifilename'] ? $app['apifilename'] : 'uc.php';&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$synstr .= '&amp;lt;script type="text/javascript" src="'.$app['url'].'/api/'.$apifilename.'?time='.$this-&amp;gt;time.'&amp;amp;code='.urlencode($this-&amp;gt;authcode('action=synlogout&amp;amp;time='.$this-&amp;gt;time, 'ENCODE', $app['authkey'])).'" reload="1"&amp;gt;&amp;lt;/script&amp;gt;';&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $synstr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;return '';&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/38041.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>ucenter1.5通讯过程分析(转载)</title><link>http://blog.vckbase.com/wangjun/archive/2009/08/03/38036.html</link><pubDate>Mon, 03 Aug 2009 14:53:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/08/03/38036.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/38036.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/08/03/38036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/38036.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/38036.html</trackback:ping><description>&lt;DIV class=tit&gt;原文：&lt;A href="http://hi.baidu.com/winterfog/blog/item/31dd3908c180709d0b7b8208.html"&gt;http://hi.baidu.com/winterfog/blog/item/31dd3908c180709d0b7b8208.html&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV class=date&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;TABLE style="TABLE-LAYOUT: fixed"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;DIV id=blog_text class=cnt&gt;
&lt;DIV forimg="1"&gt;
&lt;P&gt;&lt;FONT size=4&gt;1，用户登录bbs，通过logging.php文件中，使用函数uc_user_login验证，如果验证成功，将调用函数uc_user_synlogin（&lt;FONT color=#ff0000&gt;位于uc_client下的client.php文件中&lt;/FONT&gt;），在这个函数中调用 uc_api_post('user', 'synlogin', array('uid'=&amp;gt;$uid));之后向UC_API.'/index.php'传递了数据；这里的UC_API就是在config.inc.php中的定义的uc_server之URL地址&lt;BR&gt;2，uc_server的index.php接受参数数据，获得model为user，action为synlogin，就调用control目录下的user.php类中的onsynlogin方法，通过foreach循环，以javascript的方式通知uc应用列表中的应用同步登录；即通过get方式传递给应用目录中api下的uc.php一些数据；&lt;BR&gt;3，uc.php接收通知并处理get过来的数据，并在函数synlogin（位于uc.php中）通过函数_authcode加密数据（默认以UC_KEY作为密钥），用函数_setcookie设置cookie；&lt;BR&gt;4，各个应用在适当的文件中用对应的密钥解码上面设置的cookie，得到用户id等数据；通过这个值来判断用户是否经过其它应用登录过；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;-------------------------------------------------------------------------------------------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;不同的应用加密的函数名称可能不同，但密钥相同情况下，加密结果是一样的：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;uc.php里是_authcode，&lt;BR&gt;client.php里是uc_authcode，&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=4&gt;\bbs\include\global.func.php里是authcode&lt;BR&gt;uchome\source\function_common.php里是authcode&lt;BR&gt;supersite\function\common.func.php里是authcode&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;------------------------------------------------------------------------------------------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG class=blogimg border=0 src="/images/vckbase_com/wangjun/1274/o_ucenter.gif" width=916 small="0"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=4&gt;&lt;STRONG&gt;以discuz举例：&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;一、用户登录检查与用户登录验证logging.php&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;在bbs的logging.php中如下代码段&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;} elseif($action == 'login') {&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;if($discuz_uid) {&lt;BR&gt;&amp;nbsp;&amp;nbsp; $ucsynlogin = '';&lt;BR&gt;&amp;nbsp;&amp;nbsp; showmessage('login_succeed', $indexname);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;检查用户id变量$discuz_uid是否为空来判断，用户是否登录（包括从别的应用登录。）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;如果用户从bbs登录，则在登录验证成功后通过如下代码：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;$ucsynlogin = $allowsynlogin ? uc_user_synlogin($discuz_uid) : '';&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;通知其它应用----&amp;#8220;用户已从bbs登录，请通知其它应用设置cookie&amp;#8221;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;（uc_server通过javascript调用方式向其它应用的api/uc.php传递数据）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;可以在uc应用目录下新建一个名为test.php的文件，来模拟登录成功，请求uc_server通知其它应用。文件内容为：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;---------------------文件内容开始----------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;&amp;lt;?php&lt;BR&gt;&lt;FONT color=#0000ff&gt;include_once "config.inc.php";&lt;BR&gt;include_once "./uc_client/client.php";&lt;BR&gt;echo uc_user_synlogin(1);&lt;BR&gt;echo "&amp;lt;pre&amp;gt;";&lt;BR&gt;var_dump($_COOKIE);&lt;BR&gt;echo "&amp;lt;/pre&amp;gt;";&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;?&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;var obj=document.getElementsByTagName("script");&lt;BR&gt;for(var i=0;i&amp;lt;obj.length-1;i++) {&lt;BR&gt;&amp;nbsp;&amp;nbsp; document.write("&amp;lt;a href=\""+obj[i].src+"\"&amp;gt;"+obj[i].src+"&amp;lt;/a&amp;gt;&amp;lt;hr&amp;gt;");&lt;BR&gt;}&lt;BR&gt;&amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;---------------------文件内容结束----------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;ps:&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;这段测试代码还可以测试同步登录不好使的情况，具体使用方法，你可以思考一下(本文后面也有介绍），有问题可以在此文结尾发表评论与我讨论&lt;/STRONG&gt;&lt;/FONT&gt;。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;运行后，查看源代码即可看到javascript；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=4&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;这里要注意了&lt;/FONT&gt;：这些javascript的通知中是不包含用户登录的应用的。也就是说只"通知"用户未登录的应用，因为用户通过uc_server登录成功的当前应用，当然不需要uc_server再通知了。具体代码请参看：&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=4&gt;&lt;STRONG&gt;webroot\uc_server\control\user.php中的onsynlogin函数的这句：&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;&lt;FONT color=#ff00ff&gt;if($app['synlogin'] &amp;amp;&amp;amp; $app['appid'] != $this-&amp;gt;app['appid'])&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=4&gt;代码解释：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;$app['synlogin']是uc应用是否允许同步登录&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;而且应用id不等于用户当前登录的应用id&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;$app数组就是uc_server\data\cache\apps.php中的数组$_CACHE['apps']；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;$this-&amp;gt;app就是用户登录的应用&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;&lt;STRONG&gt;二、接受其它应用的同步登录通知：&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;在discuz的api目录下的uc.php中的函数synlogin，在这里接受uc_server发送过来的&amp;#8220;同步登录通知&amp;#8221;，并设置discuz的cookie，在这个函数中你可以查看到cookie的加密密钥的&amp;#8220;算法&amp;#8221;；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;如果你想看看uc_server发送过的的&amp;#8220;通知&amp;#8221;是什么数据，你可以这么做：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;1,修改要接受通知的应用目录下的api\uc.php，在$action = $get['action'];代码下面添加如下代码：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;echo "&amp;lt;pre&amp;gt;";var_dump($get);echo "&amp;lt;/pre&amp;gt;";die("&amp;lt;hr&amp;gt;api\uc.php");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;2,将上面建立的test.php文件放置在其它允许同步登录的应用目录下，并在浏览器中运行,然后点击页面中对应第一步的应用链接，即可看到uc_server&amp;#8220;通知&amp;#8221;给该应用的数据；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;---------------------------分割线-------------------------------&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;function synlogin($get, $post)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;在这个函数中通过_authcode函数，以密钥$discuz_auth_key加密了cookie；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;在这里为了避免cookie名称冲突，在cookie名称（一般为：auth）前加了前缀（$cookiepre)，这个前缀也就是在config.inc.php中设置的那个cookie前缀值；&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;请看设置cookie的函数_setcookie：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=4&gt;（通过参数$prefix来判断是否对cookie名称添加前缀$cookiepre）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;function _setcookie($var, $value, $life = 0, $prefix = 1) {&lt;BR&gt;global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;&lt;BR&gt;setcookie&lt;FONT color=#ff0000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;(&lt;/FONT&gt;$prefix ? $cookiepre : ''&lt;FONT color=#0000ff&gt;)&lt;/FONT&gt;.$var&lt;FONT color=#339966&gt;, &lt;/FONT&gt;$value&lt;FONT color=#339966&gt;,&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#ff9900&gt;$life ? $timestamp + $life : 0, $cookiepath&lt;/FONT&gt;&lt;FONT color=#339966&gt;,&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp; $cookiedomain&lt;FONT color=#339966&gt;,&lt;/FONT&gt; &lt;FONT color=#3366ff&gt;$_SERVER['SERVER_PORT'] == 443 ? 1 : 0&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;)&lt;/FONT&gt;;&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;密钥&amp;#8220;算法&amp;#8221;：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;$discuz_auth_key= md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;也就是不同用户加密cookie的密钥可能不同；&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=4&gt;
&lt;P&gt;&lt;FONT color=#ff0000 size=4&gt;&lt;STRONG&gt;三、检查用户是否已登录（无论是那个应用下登录）：&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;discuz的include目录中common.inc.php中有这样的代码：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT size=4&gt;&lt;FONT color=#0000ff&gt;$discuz_auth_key&lt;/FONT&gt; = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);&lt;BR&gt;list($discuz_pw, $discuz_secques, $discuz_uid) = empty($_DCOOKIE['auth']) ? array('', '', 0) : daddslashes(explode("\t", authcode($_DCOOKIE['auth'], 'DECODE')), 1);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;这段代码就是解码在uc.php中用密钥（$discuz_auth_key）加密的cookie值，以获得用户id（$discuz_uid)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;这里的&lt;FONT color=#ff0000&gt;解密函数位于bbs\include\global.func.php&lt;/FONT&gt;中，虽然未给函数传递cookie密钥，但函数中通过全局变量$GLOBALS[&lt;FONT color=#0000ff&gt;'discuz_auth_key'&lt;/FONT&gt;])获得密钥。&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/38036.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>phpcms模板(个人备忘)</title><link>http://blog.vckbase.com/wangjun/archive/2009/07/25/37978.html</link><pubDate>Sat, 25 Jul 2009 15:47:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/07/25/37978.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/37978.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/07/25/37978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/37978.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/37978.html</trackback:ping><description>templates/default/phpcms&lt;BR&gt;首页为 index.html&lt;BR&gt;修改里面的sql可以控制更新的具体数据。&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/37978.html" width = "1" height = "1" /&gt;</description></item></channel></rss>