文档介绍:1 / 16
处理session跨域几种方案
,把当前的sessionId写进cookie里面
cookie在不同域名下是不能访问的,我们需要在访问在后台设置用户在登录的时候,把需要共用的登录信息的域名,如果是在1,2级域名下,直接把 cookie设置为所属主域名,例如:setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".");
也许你会问:如果是在不同的域名呢?采用P3P技术简单解决,实现原理,, sessionid值,sessionid值便可以获取,然后把seesion值存入数据库,取相同的sessionid值便可。,默认情况下,浏览器是不能跨域设置cookie的,加上p3p头后才行。在对应php文件加上:header(‘P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"’);
session该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在,而非存储在服务器的内存中,在这里我们得修改为所有域下都能访问的方式。网上介绍了数据库存储,文件形式存储,内存存储, 如果用数据库存储session数据,网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,效率就会明显降低,可以考虑存在内存服务器来实现,。
2 / 16
常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:,
方式一: 在一,二级域名下调用如下代码:
<!--?php
include("");
$_SESSION['usssser_oke'] = 'xxssssss';
$_SESSION['user_oke'] = 'xxsss';
?-->
<!--?php
/**
/** 直接引用api QQ登录的session写法,配置相关配置才行哈
* 设置session配置
*/
/**
* CREATE TABLE `tbl_session` (
3 / 16
* `session_id` varchar(255) binary NOT NULL default '',
* `session_expires` int(10) unsigned NOT NULL default '0',
* `session_data` text,
* PRIMARY KEY (`session_id`)
* ) ENGINE=MyISAM;
*/
class Session
{
//mysql的主机地址
const db_host = "localhost"; //需要第三方指定ip地址
//数据库用户名
const db_user = "root"; //需要第三方指定自己的用户名
//数据库密码
const db_pwd = ""; //需要第三方指定自己的库据库密码
//数据库
const db_name = "thinkphp"; //需要第三方指定数据库
4 / 16
//数据库表
const db_table = "tbl_session"; //需要第三方指定数据表
//mysql-handle
private $db_handle;
//session-lifetime
private $lifeTime;
function open($savePath, $sessName)