+ -
当前位置:首页 → 问答吧 → session共享时,第二个站点sessionid为什么不一样

session共享时,第二个站点sessionid为什么不一样

时间:2010-08-13

来源:互联网



我把session 存入数据库,想让2个站点(A,B)session共享,但第B站点并不是A站点的sessionid 为什么呢.

站A: test.aaa.net 单独使用正常
站B: test2.aaa.net 先开了A,然后在B打印A的 session时为空,数据库上面查显示2个session_key(A,B各一),为什么不是只有A吗? 请知道的朋友指教~~~

这是站内session_set_save_handler 配置,两站内都是同样这内容
  1. class my_session {
  2.     protected $main_table = 'zf_session';
  3.     protected $session_expire = 3600;           //有效时间 秒
  4.     protected $db = null;

  5.     function  __construct($db) {
  6.         $this->db=$db;
  7.         $domain = '.aaa.net';
  8.         ini_set("session.save_handler", "user");
  9.         //ini_set("session.bug_compat_warn"   ,0);
  10.         //ini_set("session.bug_compat_42",    0);
  11.         //ini_set('session.gc_probability', 1);
  12.         //ini_set('session.gc_divisor', 1000); (session.gc_probability/session.gc_divisor)
  13.         //不使用 GET/POST 变量方式
  14.         ini_set('session.use_trans_sid',     0);
  15.         //设置垃圾回收最大生存时间
  16.         ini_set('session.gc_maxlifetime',    $this->session_expire);
  17.         //使用 COOKIE 保存 SESSION ID 的方式
  18.         ini_set('session.use_cookies',       1);
  19.         // ini_set('session.cookie_path',   INFO_PATH.'sesstemp/');
  20.         //多主机共享保存 SESSION ID 的 COOKIE
  21.         ini_set('session.cookie_domain',     $domain);

  22.         //将 session.save_handler 设置为 user,而不是默认的 files
  23.         session_module_name('user');
  24.         //定义 SESSION 各项操作所对应的方法名:
  25.         session_set_save_handler(
  26.                 array($this, 'open'),   
  27.                 array($this, 'close'),
  28.                 array($this, 'read'),
  29.                 array($this, 'write'),
  30.                 array($this, 'destroy'),
  31.                 array($this, 'gc')
  32.         );
  33.     }    //end function

  34.     function open($save_path, $session_name) {
  35.         return true;
  36.     }    //end function

  37.     function close() {
  38.         return true;
  39.     }    //end function

  40.     function read($session_key) {
  41.         $sql = "SELECT session_value FROM `".$this->main_table."` WHERE session_key='". $session_key ."' AND session_expire>=' ". time()."'";
  42.         $rs =$this->db->getOne($sql);
  43.         if ($rs) {
  44.             return $rs;
  45.         }    //end if
  46.         return false;
  47.     }    //end function

  48.     function write($session_key, $value) {
  49.         $sql = "SELECT session_key FROM ".$this->main_table." WHERE session_key='". $session_key."'";
  50.         // my_print($this->db);
  51.         $key =$this->db->getOne($sql);
  52.         if($key) {                              //存在记录
  53.             $arr = array(
  54.                     'session_expire'   => time()+$this->session_expire,
  55.                     'session_value'    => $value

  56.             );
  57.             $this->db->update($this->main_table, $arr, "session_key='".$session_key."'");
  58.         }
  59.         else {
  60.             $arr = array(
  61.                     'session_key'      => $session_key,
  62.                     'session_expire'   => time()+$this->session_expire,
  63.                     'session_value'    => $value,
  64.                     'date'             => date("Y-m-d H:i:s")
  65.             );
  66.             $this->db->insert($this->main_table, $arr);
  67.         }
  68.         //写入 SESSION

  69.         return true;
  70.     }    //end function

  71.     function destroy($session_key) {
  72.         $this->db->delete($this->main_table,"session_key='".$session_key."'");
  73.         return true;
  74.     }    //end function

  75.     function gc($maxlifetime = null) {
  76.                 $max = $maxlifetime ? $maxlifetime : $this->session_expire + 3600*24;
  77.         $this->db->delete($this->main_table,"session_expire < '".$max."'");
  78.         //由于经常性的对表 sess 做删除操作,容易产生碎片,
  79.         //所以在垃圾回收中对该表进行优化操作。
  80.         $this->db->execute("OPTIMIZE TABLE ".$this->main_table);
  81.         return true;
  82.     }    //end function
  83. }   
复制代码

作者: smallipis   发布时间: 2010-08-13

怎么突然又行了- -
麻烦版主帮我删除帖子吧.我删除不了

作者: smallipis   发布时间: 2010-08-13

如果基于cookie,打印http head,先保证cookie一致性

作者: bs   发布时间: 2010-08-13