前段时间做了一个PHP的项目,基本情况是这样的:   论坛:bbs.xxx.com  验证登录状态cookies:bbsloginauth
   空间:home.xxx.com  验证登录状态cookies:homeloginauth
   商城:shop.xxx.com  验证登录状态cookies:shoploginauth  为了实现这三个系统的同步登录而开发了通行证系统:
  passport.xxx.com 
    这个通行证验证登录状态的cookies为:passportloginauth      登录流程是这样的:    用户全部统一在通行证(passport)这里登录,写passportloginauth、bbsloginauth、homeloginauth、shoploginauth这四个cookies。
  setcookie  的domain全部为.xxx.com   path全部是'/'
    登录的时候cookies的有效期全部设置为一年。   测试的时候是一切正常的,但是实际运行中就出问题了。用户登录后一切正常,但是第二天重新打开网站的时候,经常会出现以下情况:通行证(passport)这里登录状态依然正常,但是其他三个系统却莫名的退出了登录。打开临时文件夹查看cookies,发现passportloginauth这个确实存在,但是,bbsloginauth、homeloginauth、shoploginauth这三个却消失了!
  希望PHP高手们指点一二~~~

解决方案 »

  1.   

    理论上不存在问题....可以试试HTTP抓包分析...重点看 过期时间..
      

  2.   

    可是 cookie 保存在客户端, 难免会与客户端的配置有关, 可以多用不同客户端测试比较一下, 譬如有些安全连接退出时会自动清空之类的 ...
      

  3.   


    检查一下COOKIE的过期时间是否设置有误:PHP setcookie() 用法setcookie(name, value, expire, path, domain, secure)
    返回 true 表示成功,返回 false 表示失败。name、value 为必选,其他为可选参数。expire cookie 过期时间,time() + 3600 * 24 * 30 将设置 Cookie 过期 30 天。默认为关闭浏览器即过期。
    secure 是否按 HTTPS 连接传送。默认为 false。
    setcookie() 将自动编码 cookie(接收时自动解码)。若要原样写入 cookie,请使用 setrawcookie。<?php
    setcookie("cookieName", "cookieValue", time() + 3600 * 24);
    ?>另外 domain设置改为"xxx.com ",去掉前面的"."
      

  4.   


       您测试过吗??   这是PHP啊,不是ASP啊。ASP中确实不能有dot,但是PHP是必须有这个dot的。
          还有一个最近发现的一个PHP的BUG,也给大家说下,就是子域名共享cookie的时候cookie的名字中不能包含“_”(下划线),经测试“-”(杠)却没有问题。
      

  5.   

    关注中,一直都用session,还没用过cookie的飘过
      

  6.   


    我的也是哦。。有时候感觉他们根本就是无法控制的。
    看你是如何设置COOKIE的。Discuz的那个COOKIE设置和销毁的几个函数,用了后基本上没出过问题。
      

  7.   


    cooke的产生和设置都一样,  有差异不太可能
    是否是其他位置也可以登陆?