牛骨文教育服务平台(让学习变的简单)
博文笔记

session跨域问题解决方案(转载,其中试验一个方法,成功)

创建时间:2015-10-10 投稿人: 浏览次数:697
  1. 常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了一下处理方法。  
  2. 方式一:  
  3.     在一,二级域名下调用如下代码:      
  4. <?php      
  5.     include("DBsession.php");      
  6.     $_SESSION["usssser_oke"] = "xxssssss";      
  7.     $_SESSION["user_oke"] = "xxsss";        
  8. ?>    
  9.   
  10.   
  11. DBsession.php  
  12.   
  13.   
  14.     <?php      
  15.     /**   
  16.        
  17.     /**  直接引用api QQ登录的session写法,配置相关配置才行哈 
  18.      * 设置session配置    
  19.      */      
  20.           
  21.     /**   
  22.      * CREATE TABLE `tbl_session` (   
  23.      *     `session_id` varchar(255) binary NOT NULL default "",   
  24.      *     `session_expires` int(10) unsigned NOT NULL default "0",   
  25.      *     `session_data` text,   
  26.      *     PRIMARY KEY  (`session_id`)   
  27.      *    ) ENGINE=MyISAM;   
  28.      */      
  29.           
  30.     class Session       
  31.     {      
  32.         //mysql的主机地址      
  33.         const db_host = "localhost"; //需要第三方指定ip地址       
  34.           
  35.         //数据库用户名      
  36.         const db_user = "root";   //需要第三方指定自己的用户名      
  37.           
  38.         //数据库密码      
  39.         const db_pwd = ""; //需要第三方指定自己的库据库密码      
  40.           
  41.         //数据库      
  42.         const db_name = "thinkphp";      //需要第三方指定数据库      
  43.           
  44.         //数据库表      
  45.         const db_table = "tbl_session"; //需要第三方指定数据表      
  46.           
  47.         //mysql-handle      
  48.         private $db_handle;      
  49.           
  50.         //session-lifetime      
  51.         private $lifeTime;      
  52.           
  53.         function open($savePath, $sessName)       
  54.         {      
  55.             // get session-lifetime      
  56.             $this->lifeTime = get_cfg_var("session.gc_maxlifetime");      
  57.           
  58.             // open database-connection      
  59.             $db_handle = @mysql_connect(self::db_host, self::db_user, self::db_pwd);      
  60.           
  61.             $dbSel = @mysql_select_db(self::db_name, $db_handle);      
  62.           
  63.             // return success      
  64.             if(!$db_handle || !$dbSel)      
  65.                 return false;      
  66.           
  67.             $this->db_handle = $db_handle;      
  68.             return true;      
  69.         }      
  70.           
  71.         function close()       
  72.         {      
  73.             $this->gc(ini_get("session.gc_maxlifetime"));      
  74.             // close database-connection      
  75.             return @mysql_close($this->db_handle);      
  76.         }      
  77.           
  78.         function read($sessID)       
  79.         {      
  80.             // fetch session-data      
  81.             $res = @mysql_query("SELECT session_data AS d FROM ".self::db_table."     
  82.                 WHERE session_id = "$sessID"    
  83.                 AND session_expires > ".time(), $this->db_handle);      
  84.           
  85.             // return data or an empty string at failure      
  86.             if($row = @mysql_fetch_assoc($res))      
  87.                 return $row["d"];      
  88.           
  89.             return "";      
  90.         }      
  91.           
  92.         function write($sessID, $sessData)       
  93.         {      
  94.             // new session-expire-time      
  95.             $newExp = time() + $this->lifeTime;      
  96.           
  97.             // is a session with this id in the database?      
  98.             $res = @mysql_query("SELECT * FROM ".self::db_table."     
  99.                 WHERE session_id = "$sessID"", $this->db_handle);      
  100.           
  101.             // if yes,      
  102.             if(@mysql_num_rows($res))       
  103.             {      
  104.                 // ...update session-data      
  105.                 @mysql_query("UPDATE ".self::db_table."     
  106.                     SET session_expires = "$newExp",    
  107.                     session_data = "$sessData"    
  108.                     WHERE session_id = "$sessID"", $this->db_handle);      
  109.           
  110.                 // if something happened, return true      
  111.                 if(@mysql_affected_rows($this->db_handle))      
  112.                     return true;      
  113.             }      
  114.             else // if no session-data was found,      
  115.             {      
  116.                 // create a new row      
  117.                 @mysql_query("INSERT INTO ".self::db_table." (    
  118.                     session_id,    
  119.                     session_expires,    
  120.                     session_data)    
  121.                     VALUES(    
  122.                         "$sessID",    
  123.                         "$newExp",    
  124.                         "$sessData")", $this->db_handle);      
  125.                 // if row was created, return true      
  126.                 if(@mysql_affected_rows($this->db_handle))      
  127.                     return true;      
  128.             }      
  129.           
  130.             // an unknown error occured      
  131.             return false;      
  132.         }      
  133.           
  134.         function destroy($sessID)       
  135.         {      
  136.             // delete session-data      
  137.             @mysql_query("DELETE FROM ".self::db_table." WHERE session_id = "$sessID"", $this->db_handle);      
  138.           
  139.             // if session was deleted, return true,      
  140.             if(@mysql_affected_rows($this->db_handle))      
  141.                 return true;      
  142.           
  143.             // ...else return false      
  144.             return false;      
  145.         }      
  146.           
  147.         function gc($sessMaxLifeTime)       
  148.         {      
  149.             // delete old sessions      
  150.             @mysql_query("DELETE FROM ".self::db_table." WHERE session_expires < ".time(), $this->db_handle);      
  151.           
  152.             // return affected rows      
  153.             return @mysql_affected_rows($this->db_handle);      
  154.         }      
  155.     }      
  156.           
  157.     /**   
  158.      * 指定session有效的域名   
  159.      * ini_set("session.cookie_domain", ".domain.com");   
  160.      * .domain.com是站点的主域名,请注意前面个有一个"."   
  161.      */      
  162.     define("MAIN_DOMAIN", ".ichezone.com");   //设置主域名      
  163.           
  164.     /**   
  165.      * 不同子域名下共享session信息   
  166.      * COOKIE_DOMAIN = false 禁止该功能   
  167.      * COOKIE_DOMAIN = true  启用该功能   
  168.      * 默认禁止   
  169.      * 开启前提需要定义MAIN_DOMAIN常量   
  170.      */      
  171.     define("COOKIE_DOMAIN", true);       
  172.     if (defined("COOKIE_DOMAIN") && COOKIE_DOMAIN)      
  173.     {      
  174.         if (defined("MAIN_DOMAIN"))      
  175.             @ini_set("session.cookie_domain", MAIN_DOMAIN);      
  176.     }      
  177.           
  178.     /**   
  179.      * 同一个主域名,不同服务器之间共享session信息   
  180.      * USER_SESSION = false 禁用该功能   
  181.      * USER_SESSION = true  启用该功能   
  182.      * 默认禁止   
  183.      * 开启前提需要建立mysql数据表   
  184.      */      
  185.      ini_set("session.name", "phpsessid");//设置色session id的名字      
  186.     define("USER_SESSION", true);      
  187.     if (defined("USER_SESSION") && USER_SESSION)      
  188.     {      
  189.         @ini_set("session.save_handler", "user");      
  190.         $session = new Session;      
  191.         @session_module_name("user");      
  192.         @session_set_save_handler(      
  193.             array(&$session, "open"),      
  194.             array(&$session, "close"),      
  195.             array(&$session, "read"),      
  196.             array(&$session, "write"),      
  197.             array(&$session, "destroy"),      
  198.             array(&$session, "gc"));      
  199.     }      
  200.     //@ini_set("session.save_path", dirname(__file__)."/tmp");      
  201.     //@session_id("demo");      
  202.     //ini_set("session.save_path",dirname(__file__)."/tmp");      
  203.     session_start();  
  204.     include("DBsession.php");      
  205.     $_SESSION["usssser_oke"] = "xxssssss";      
  206.     $_SESSION["user_oke"] = "xxsss";       
  207.     ?>     
  208.   
  209.   
  210. 方式二:  
  211. PHP Code复制内容到剪贴板  
  212.   
  213.     <?php    
  214.     ini_set("session.name", "sid");//设置色session id的名字    
  215.     ini_set("session.use_trans_sid", 0);//不使用 GET/POST 变量方式    
  216.     ini_set("session.use_cookies", 1);//使用 COOKIE 保存 SESSION ID 的方式    
  217.     ini_set("session.cookie_path", "/");    
  218.     ini_set("session.cookie_domain", ".ichezone.com");//多主机共享保存 SESSION ID 的 COOKIE,注意此处域名为一级域名    
  219.     session_start();    
  220.     $_SESSION["usssser_oke"] = "xxssssss";    
  221.     $_SESSION["user_oke"] = "xxsss";      
  222.     ?>    
  223.   
  224. 第三种方式:  
  225. PHP Code复制内容到剪贴板  
  226.   
  227.     一级域名:    
  228.     session_start();    
  229.     setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".ichezone.com");    
  230.      $_SESSION["user_name"] = "梁山良民";    
  231.     二级域名:    
  232.     session_id($_COOKIE["session_id"]);    
  233.     session_start();    
  234.     $_SESSION["user_sssme"] = 222222;    
  235.   
  236. 第四种方式:  
  237. PHP Code复制内容到剪贴板  
  238.   
  239.     一级域名:    
  240.     ini_set("session.cookie_domain",".ichezone.com");//注:该参数必须在sesson_start()之上,否则将不会生效    
  241.     session_start();    
  242.     $_SESSION["user_name"] = "梁山www良民";    
  243.     二级域名:    
  244.     ini_set("session.cookie_domain",".ichezone.com");//注:该参数必须在sesson_start()之上,否则将不会生效    
  245.     session_start();    
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。