导航:首页 > IDC知识 > session跨域二级域名

session跨域二级域名

发布时间:2021-03-22 09:31:41

1、是否可能跨域共享Session信息或者怎么实现单点登录

二级域名和顶级域名相同,可以共享cookie。
你可以用memcache或者redis,实现tomcat各个服务器session同步,基本上可以满足要求了。

2、CI 的SESSION 如何跨域名使用呢?

通过ajax 的 jsonp来实现 $.ajax({ type:'get', url:' http://demo.aaa.com', dataType:"jsonp", jsonp:"jsonpcallback", data:{"参数1":""+值+"","参数2":""+值+""}, success:function(data){});

3、thinkphp 如何子域名session跨域

?

4、cookie跨域,二级域名之间如何共享

|TP5解决方案
// +----------------------------------------------------------------------
// | Cookie设置
// +----------------------------------------------------------------------
'cookie' => [
// cookie 名称前缀
'prefix' => '',
// cookie 保存时间
'expire' => 0,
// cookie 保存路径
'path' => '/',
// cookie 有效域名
'domain' => '', // 这里是重点
// cookie 启用安全传输
'secure' => false,
// httponly设置
'httponly' => '',
// 是否使用 setcookie
'setcookie' => true,
],
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
其它
cookis 设置,读取方法,跨域[二级域名]
$time =30;
$domain ='.111cn.net';
setcookie("abcde","aaaaaa");//最简单的cookie设置方法
setcookie('load','www.111cn.net',time()+3600*24,'/','.111cn.net'); //这里可以设置二级域名
$cookis = $_COOKIE['loadDomain'];//读取域名
print_r( $cookis );
/*
来看几个例子:
简单的:
SetCookie("MyCookie", "Value of MyCookie");
带失效时间的:
SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时
什么都有的:
SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".111cn.net", 1);
*/
?>
<script language="javascript教程">
function setcookie(name,days)
{
var url = document.domain;
var exp = new Date();
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape(url) +";expires="+ exp.toGMTString();
}
function getcookie(name)
{
var arr = document.cookie.match(new RegExp("[sS]*"+ name +"=([^;]*)"));
alert(arr);
if(arr != null)
return unescape(arr[1]);
return null;
}
</script>
//php教程 cookies
//asp教程 cookies
Response.Cookies("Uto")("UtorName")=UtorName
Response.Cookies("Uto")("UtorPwd")=UtorPwd
Response.Cookies("Uto").Domain="utoper.com"
Response.Cookies("Uto").Secure =False

5、php session跨域问题

php实现SESSION跨域
稍微大一点的网站,通常都会有不只一个服务器,每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二级域名,比如www.a.com、i.a.com、bbs.a.com。而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个子系统中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在i.a.com登录之后,进入www.a.com时,仍然需要重新登录,基本的通行证的问题,映射到技术上,其实就是各个服务器之间如何实现共享 SESSION 数据的问题。
为了解决这个问题,我们采用将 SESSION 的数据保存数据库的方式。关于PHP SESSION的扫盲这里就不在累赘。在默认情况下,各个服务器会各自分别对同一个客户端产生 SESSION ID,如对于同一个用户浏览器,www.a.com系统产生的 SESSION ID 是,而i.a.com生成的则是。另外,PHP 的 SESSION 数据都是分别保存在本服务器的文件系统中。
想要共享 SESSION 数据,那就必须实现两个目标:www.a.com和i.a.com所产生的SESSION ID相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;另一个是 SESSION 数据必须存放在一个各个系统都能访问到的地方。简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION 数据。
第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的,如 www.a.com 的服务器是不能读写 www.b.com 服务器设置的 COOKIE 的。这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如:www.a.com 和 i.a.com 都属于域 .a.com,那么我们就可以设置 COOKIE 的域为 .a.com,这样 www.a.com、i.aaa.com 等等都可以访问此 COOKIE。PHP 代码中的设置方法如下:
1
ini_set('session.cookie_domain', '.a.com');
这样各个系统共享同一客户端 SESSION ID 的目的就达到了,下面就是共享SESSION数据,我们就将SESSION数据放在数据库中,首先建立数据库表:
1
CREATE TABLE sessions (
2
session_id varchar(32) NOT NULL,
3
session_last_access int(10) unsigned,
4
session_data text,
5
PRIMARY KEY (session_id)
session_id为主键,保存SESSION ID ,session_last_access是SESSION最后更新时间,session_data是SESSION数据。
PHP 提供了session_set_save_handle() 函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 session.save_handler 改成 user,可在 PHP 中进行设置:
接下来着重讲一下 session_set_save_handle() 函数,此函数有六个参数:
session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )
各个参数为各项操作的函数名,这些操作依次是:打开、关闭、读取、写入、销毁、垃圾回收。PHP 手册中有详细的例子,详细代码如下:
view sourceprint?
01
$gb_DBHOSTname = "127.0.0.1"; //主机的名称或是IP地址
02
$gb_DBname = "dbname"; //数据库名称
03
$gb_DBuser = "username"; //数据库用户名称
04
$gb_DBpass = "pwd"; //数据库密码
05
$gb_COOKIE_DOMAIN = '.a.com';
06
$SESS_DBH = "";
07
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); //得到session的最大有效期。
08
session_id(); //不使用 GET/POST 变量方式
09
ini_set('session.use_trans_sid', 0); //设置垃圾回收最大生存时间
10
ini_set('session.gc_maxlifetime', 13600); //使用 COOKIE 保存 SESSION ID 的方式
11
ini_set('session.use_cookies', 1);
12
ini_set('session.cookie_path', '/'); //多主机共享保存 SESSION ID 的 COOKIE
13
ini_set("session.cookie_domain", $gb_COOKIE_DOMAIN);
14
//将 session.save_handler 设置为 user,而不是默认的 files session_mole_name('user');
15
function sess_open($save_path, $session_name) {
16
global $gb_DBHOSTname, $gb_DBname, $gb_DBuser, $gb_DBpass, $SESS_DBH;
17
if (!$SESS_DBH = mysql_pconnect($gb_DBHOSTname, $gb_DBuser, $gb_DBpass)) {
18
die('MySQL Error');
19
}
20
mysql_query("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary", $SESS_DBH);
21
if (!mysql_select_db($gb_DBname, $SESS_DBH)) {
22
die('MySQL Error');
23
}
24
return true;
25
}
26

27
function sess_close() {
28
global $SESS_DBH;
29
//$SESS_DBH->Close();
30
return true;
31
}
32

33
function sess_read($key) {
34
global $SESS_DBH, $SESS_LIFE;
35
// var_mp($SESS_DBH);
36
$qry = "select session_data from sessions where session_id = '$key' ";
37
$qid = mysql_query($qry, $SESS_DBH);
38
// var_mp($qid);
39
if (list ($value) = mysql_fetch_row($qid)) {
40
return $value;
41
}
42
return false;
43
}
44

45
function sess_write($key, $val) {
46
global $SESS_DBH, $SESS_LIFE;
47
$session_last_access = time();
48
$value = $val;
49
$qry = "insert into sessions values('$key',$session_last_access,'$value')";
50
$qid = mysql_query($qry, $SESS_DBH);
51
if (!$qid) {
52
$qry = "update sessions set session_last_access=$session_last_access, session_data='$value' where session_id='$key' ";
53
$qid = mysql_query($qry, $SESS_DBH);
54
}
55
return $qid;
56
}
57

58
function sess_destroy($key) {
59
global $SESS_DBH;
60
$qry = "delete from sessions where session_id = '$key'";
61
$qid = mysql_query($qry, $SESS_DBH);
62
return $qid;
63
}
64

65
function sess_gc($maxlifetime) {
66
global $SESS_DBH;
67
$old = time() - $maxlifetime;
68
$old = mysql_real_escape_string($old);
69
$qry = "delete from sessions where session_last_access < " . $old;
70
$qid = mysql_query($qry, $SESS_DBH);
71
return mysql_affected_rows($SESS_DBH);
72
}
73
session_mole_name();
74
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write","sess_destroy", "sess_gc");
75
session_start();

6、session怎么解决跨域问题

何为跨域跨域session/cookie?

也就是第三方session/cookie。第一方session/cookie指的是访客回当前访问的网答站给访客的浏览器设置的seesion /cookie,
会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网
站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。

7、二级域名之间可以相互跨域吗?

可以的,但是一定要保持内容的相关性,不搭边的内容不要跨域。

8、session跨域共享怎么实现

首先一点,你要明白session的大部分实现都是通过cookie的,所以跨域session是不可能的。
但跨专域的认证还是可以有属OAuth等实现方法,但不太推荐OAuth项目貌似烂尾了,随然大家都在用。

其次虽然跨域有点难,但放在同一域下的不同项目是可以共享session的,CAS也不算复杂,你可以上github搜一下redis-session这个项目,只有一个源代码文件,它给出了redis下session的一种nodejs实现,就是设置redis的超时来模拟session的超时。

再次,跨域也是可以的,就是使用iframe,在登录时,在多个域下同时写cookie,注意浏览器差异。

综上,你的想法完全可行。

9、关于把session存入数据库中实现跨域!

记得小时候有道物理作抄业,说是怎样才能在高原地区将锅中的鸡蛋煮熟,别的同学说是用高压锅,我记得我的答案是在锅边上围上一圈布,也可以将鸡蛋煮熟,直到十几年后的今天,我仍然能够清晰的记得老师的评语是血淋淋的九个大字:

想法很好,但事倍功半!

我希望能以一个普通网友的身份,将这句话也送给你。

与session跨域二级域名相关的知识