现在做一个网站,需要二级域名也显示登录状态,这就用到了session共享的问题,网上说使用ini_set('session.cookie_domain', '.example.com');可以设置域名,然后共享session,我试了,session可以共享,问题是,主域名和二级域名互相不认这个sessionid,每次执行session_star()都会清空session,也就是,一边登录,在另一边一刷新,两边就都登出了。后来找到一段文字: 
Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。我打开php.ini中的session.use_trans_sid = 1
传递id,一样会清空session,等于每次都会新建一个文件,覆盖原来的文件。我怀疑是不是服务器安全设置的问题,但是网上却没有任何这方面的资料,请问,会有哪些原因造成这种情况?该怎么解决?
非常感谢!

解决方案 »

  1.   

    你说的是单点登录?跨域是不能共享session的,但用session_id有办法取得session的值
      

  2.   

    我明白通过sessionid可以取得session值,但是我换域就会自动清空session(新建一个同ID的session空文件)。请问为什么会出现这样的清空,怎样才能避免这样。
      

  3.   

    找到问题所在了,网站安装了Suhosin。谢谢支持。
      

  4.   

    我一直都是用COOKIE,没用SESSION。
      

  5.   

    韩国人设计的一个插件,让服务器安全用的,google一下,很多介绍的
      

  6.   

    跨域登录用COOKIE来记录登录信息
    或者共享SESSION 。。把SESSION放到MEMCACHED里