我认为你可以通过sessionid来处理这个问题

解决方案 »

  1.   

    1、设置两域为信任域,并指定session的域为其中之一
    2、可通过显式的传递sessionid来解决,条件是两站在同一机器上,或两站使用同一数据库存放session
      

  2.   

    也在考虑有没有更好的办法。
    用cookie 好了,不用考虑服务器的问题
      

  3.   

    我也在考虑这个问题。很是郁闷。如何设置信任域?session 如何指定域??
      

  4.   

    唠叨大哥,我的二级域名怎么设置信任域呀?我的session是在文件中存放的,我的主机域名是wwcec.net,设置www,search,reg等多个二级域名,现在session在www.wwcec.net中完全正常,但是在search.wwcec.net、reg.wwcec.net、service.wwcec.net中不能正常使用。我用session进行登录验证,在www.wwcec.net中登录后,跳转search.wwcec.net或者service.wwcec.net中都不能显示登录后的信息,这该怎么办呀?我不想用Cookie来解决问题,请教高手有没有好的办法?
      

  5.   

    如何显式传递sessionid?我的站点用同一个数据库,而且网页在一台机器上。
      

  6.   

    不知道这个程序能否实现跨域访问session
    <? 
    //config 开始 $session_cfg['host']='localhost'; // ← MySQL 服务器的 host 
    $session_cfg['port']='3306'; // ← MySQL 服务器的端口号,默认为 3306 
    $session_cfg['user']='session_user'; // ← MySQL 登录用户名 
    $session_cfg['user_passwd']='12345'; // ← MySQL 登录用户的密码 
    $session_cfg['db']='sessiondb'; // ← MySQL 中存放session数据的数据库名 
    $session_cfg['pconnect']=true; // ← 是否使用 持续连接 连接 MySQL,建议设为 
    // 持续连接 
    $session_cfg['expires']=20; // ← Session 生存周期,即用户离开本站后 
    // 多长时间算其已经 timeout 
    $session_cfg['cookie_name']='SESSION_ID'; // ← Session 所使用的 cookie 名称 
    $session_cfg['cookie_path']='/'; // ← Session 所使用的 cookie 的路径 
    $session_cfg['cookie_domain']=''; // ← Session 所使用的 cookie 域名,例如设为 
    // 'test.com',那么用户在访问任何以 
    // test.com 结尾的主机时此 Session 
    // 都有效,如 aa.test.com 、 bb.test.com //config 结束 
    //↓假若需要,请在此文件中写 session_onstart() 和 session_onend() 处理函数 
    require('global.php'); 
    //↓以下是所有函数定义 function session_init(){ //此函数初始化一个 Session ,并调用 session_onstart() 函数 
    global $session_cfg,$s_link,$HTTP_SERVER_VARS; 
    $session_id=md5(uniqid(rand())); 
    //↑生成唯一的 Session ID,并发送 cookie ,使 client 的 cookie 与服务器 
    // 端 session 数据对应 
    setcookie($session_cfg['cookie_name'],$session_id,'',$session_cfg['cookie_path'], 
    $session_cfg['cookie_domain']); 
    mysql_query("insert into session values('".$session_id."','".$client_ip. 
    "',now(),now(),'')",$s_link); //初始化数据库中 Session 
    //↓为方便用户获取 Session ID,将 Session ID、Client IP、开始时间和最后活动时间 
    // 放入 session 数组 
    $session['id']=$session_id; 
    $session['client_ip']=$HTTP_SERVER_VARS['REMOTE_ADDR']; 也放进去 
    $session['last_active_time']=$session['start_time']=date('Y-m-d H:i:s'); 
    if(function_exists('session_onstart')){ //假若用户定义了session_onstart,那么调用它! 
    session_onstart(); 

    return $session; //返回 session 数组 

    //↓此函数在本程序最后注册为 shutdown function,即在页面执行完后调用, 
    // 将 Session 数据保存至数据库 
    function save_data(){ 
    global $session,$s_link,$HTTP_SERVER_VARS; 
    $session_id=$session['id']; 
    unset($session['id']); //↙不要的保存前都删掉:) 
    unset($session['client_ip']); 
    unset($session['last_active_time']); 
    unset($session['start_time']); 
    $sql="update session set client_ip='".$HTTP_SERVER_VARS['REMOTE_ADDR']. 
    "',session_data='".addslashes(serialize($session)). 
    "',last_active_time=now() where session_id='".$session_id."'"; 
    //↗将 session 数组 用函数 serialize() 后会将所有数据变成一个string, 
    // 可用 unserialize() 将其恢复。 
    mysql_query($sql,$s_link); 
    } function unload_session(){ //相当于 session_destroy() ,销毁当前的 Session 数据 
    global $session,$s_link; 
    if(function_exists('session_onend')) session_onend(); 
    mysql_query("delete from session where session_id='".$session['id']."'",$s_link); 
    } function read_application_data(){ //读取 Application 共享数据 
    global $s_link; 
    $tmpstr=mysql_result(mysql_query("select * from application",$s_link),0,0); 
    $application=unserialize($tmpstr); 
    return $application; 

      

  7.   

    to : fzjw(清风) 
    "我的二级域名怎么设置信任域呀?我的session是在文件中存放的,我的主机域名是wwcec.net,设置www,search,reg等多个二级域名,现在session在www.wwcec.net中完全正常,但是在search.wwcec.net、reg.wwcec.net、service.wwcec.net中不能正常使用。我用session进行登录验证,在www.wwcec.net中登录后,跳转search.wwcec.net或者service.wwcec.net中都不能显示登录后的信息,这该怎么办呀?我不想用Cookie来解决问题,请教高手有没有好的办法?"在页面中加入:
    <script>
    document.domain = "wwcec.net"
    </script>设置php.ini的
    session.cookie_domain="wwcec.net"
    应该也是可以的,试试?
      

  8.   

    好的,去试试。谢谢先刚才那个函数没有贴完,出处在这里:用 PHP + MySQL 实现跨域名 Session 功能(一) 
    http://bbs.iwebhome.net/index.php?showtopic=332&hl=跨域用 PHP + MySQL 实现跨域名 Session 功能(二) 
    http://bbs.iwebhome.net/index.php?showtopic=333&hl=跨域用 PHP + MySQL 实现跨域名 Session 功能(源码) 
    http://bbs.iwebhome.net/index.php?showtopic=334&hl=跨域继续贴出后半部分:function application_lock(){ //锁定 Application ,准备更新 
    global $application,$s_link; 
    mysql_query('lock tables application write',$s_link); 
    $application=read_application_data(); //重新读取 Application 数据 
    } function application_unlock(){ //解锁并更新 Application 数据 
    global $application,$s_link; 
    mysql_query("update application set data='".addslashes(serialize($application))."'",$s_link); 
    mysql_query('unlock tables',$s_link); 
    } //以下是主程序 //↓根据 session_cfg 的设定判断用不用 持续连接 
    $db_connect=$session_cfg['pconnect'] ? 'mysql_pconnect' : 'mysql_connect'; //↓连接数据库 
    $s_link=@$db_connect($session_cfg['host'].':'.$session_cfg['port'],$session_cfg['user'], 
    $session_cfg['user_passwd']); @mysql_select_db($session_cfg['db'],$s_link); 
    if(@mysql_error()) die('错误:MySQL 数据库连接失败!'); //↓读取 cookie 中 Session ID 
    $session_id=isset($HTTP_COOKIE_VARS[$session_cfg['cookie_name']]) ? 
    $HTTP_COOKIE_VARS[$session_cfg['cookie_name']] : ''; 
    //↓调用 session_onend() (假若你在 global.php 中定义了的话)处理 Session 的结束工作 
    if(function_exists('session_onend')){ 
    $s_sql="select * from session where last_active_time<date_add(now(),interval -".$session_cfg['expires']." minute)"; 
    $s_res=mysql_query($s_sql,$s_link); 
    if(mysql_num_rows($s_res)!=0){ 
    while($s_row=mysql_fetch_array($s_res)){ 
    $session=unserialize($s_row['session_data']); 
    $session['id']=$s_row['session_id']; 
    $session['client_ip']=$s_row['client_ip']; 
    $session['last_active_time']=$s_row['last_active_time']; 
    $session['start_time']=$s_row['start_time']; 
    session_onend(); 

    unset($session); 

    } //↓将超时的 Session 踢出! 
    mysql_query("delete from session where last_active_time<date_add(now(),interval -". 
    $session_cfg['expires']." minute)",$s_link); if($session_id==''){ //怎么?第一次来?初始一个! 
    $session=session_init(); 
    }else{ 
    $s_res=mysql_query("select * from session where session_id='".$session_id."'"); 
    if(mysql_num_rows($s_res)==0){ //用户已离开超过 session_cfg 中设定的生存周期 
    $session_is_timeout=true; //注意一下,可通过此变量判断用户是否为timeout! 
    $session=session_init(); 
    }else{ 
    //↓读取 Session 数据 
    $s_row=mysql_fetch_array($s_res); 
    $session=unserialize($s_row['session_data']); 
    $session['id']=$session_id; 
    $session['client_ip']=$s_row['client_ip']; 
    $session['last_active_time']=$s_row['last_active_time']; 
    $session['start_time']=$s_row['start_time']; 

    } $application=read_application_data(); //←读取 Application 数据 //↓当本页结束时,执行 save_data() 保存 Session 数据 
    register_shutdown_function('save_data'); ?> 
      

  9.   

    小弟非常感谢“唠叨”大哥,你的办法真好,都怪我自己不动脑筋,在设置了session_cookie_domain后就完全好了,只有reg.wwcec.net不行,我的注册系统是运行在SSL上的,也许和SSL有关,不过反正注册不需要登录,搞定了,再次谢谢唠叨大哥。^-^
      

  10.   

    问题的根源是浏览器的session id的传递。一般情况下是通过cookie来传递session  id的。如果禁用cookie php会重写a=href,area=href,frame=src,input=src,form=fakeentry 等链接或表单,并把id通过get方式来传递。
      

  11.   

    用数据库保存session,通过sessionid找到相对应的session value
      

  12.   

    2、可通过显式的传递sessionid来解决,条件是两站在同一机器上,或两站使用同一数据库存放session支持!