Application Sessions Take 60 Seconds to Log Off

这几天碰到一个问题,比较头疼啊,今天终于解决了。

问题:用户使用的Citrix产品环境中,使用Iphone或者Ipad接入系统以后,打开程序,再迅速关闭程序的话,Iphone或者Ipad会出现灰屏,卡住1分钟左右,才会正常退出。也就是说,程序关闭后,用户的session会持续1分钟左右才会关闭。

研究了2天,排除了各种可能,最终算是完美解决了。

最开始还以为是苹果产品上的Receiver的Bug,结果,用PC登录测试,发现PC虽然可以关闭,但是到服务器上去看(或者可以查看本地Citrix连接中心,发现是一样的,PC关闭程序以后,类似强制关闭一样,不去等待后台会话完全注销,所以PC用户没有感觉,但是Ipad和Iphone用户需要等待会话注销才退出,1分钟太漫长了。

发现是session注销慢以后,就开始查找原因了,以为是域的问题,然后重新搭建了一套测试环境,用来排除域的问题。结果,发现,还是一样的的问题,session还是会等待一分钟才注销。然后又开始怀疑系统问题,因为以前环境不是我搭建的,操作系统不是原盘,于是放上MSDN版的2003R2,重新安装,测试,发现问题依旧。

这期间也测试过一些解决办法,打印机驱动卡会话的问题,于是把本机的所有打印机全部删除,策略里面禁用打印机,测试,问题依旧。还测试了windows profile可能导致的注销缓慢问题,清理了profile,跟踪了,也没有问题。

问题查找还在继续,已经到周五了,再不搞定,就回不了家了。硬着头皮上了一套2008R2的环境,同时又去查Citrix的KB,发现了一条比较有价值的信息。

http://support.citrix.com/article/CTX106049

发现,原来是微软的策略问题,测试,终于OK了。

原因:

windows 2003 SP1中自动启用了一个自动证书注册的配置,导致在用户登陆初始化的过程中会有两个userinit实例运行。其中有一个需要60秒的时间来自动注册证书。如果用户等待60秒,那么该过程将正常结束,用户可以快速退出。但是如果用户在60秒以内马上退出,用户需要等待userinit的一个实例60,到该实例完成以后,才可以正常退出。这就导致了iphone和ipad在打开程序,马上退出后,会等待1分钟左右才能退出的问题了,而PC机,相当于在后台处理,对用户是透明的。

解决办法:很简单,可以参考官方文章,我选用了域策略的问题。

只要对Terminal User开启以下策略即可:

把用户配置User Configuration\Security Settings\Public Key Policies\下面的 Autoenrollment Settings设置为Do not enroll certificates automatically即可,刷新策略,一切正常了。