SESSION共享达到不同网站只需登录一次,就能访问不同应用的目的。如果想达到这个目的,必须对session的工作原理了如指掌。
session的工作原理
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。如果是同服务器下不同域名的话,我们可以取巧一下,只需设置Cookie的这个位置标示。那么我的php.ini中session名称为PHPSESSID。这里可以用$_COOKIE['PHPSESSID']获取当前域下的Cookie。
以上是关于SESSION的基础内容。一下是怎么实现SESSION跨域。
测试域名:
A站:www.a.com
B站:www.b.com
C站:www.c.com
所需材料 jquery.js
第一步:所有SESSION以A站为主。
在A站根目录下建立一个s.php
<?php
session_start();
//如果没有获取到cookie再跳转一次从新获取cookie
if (!$_COOKIE['PHPSESSID']) {
header("location:s.php");
}
echo 'var session_key="'.$_COOKIE['PHPSESSID'].'";';
第二步:在每个网站下面创建s.js
//获取cookie
function getCookie(objName) {
var arrStr = document.cookie.split("; ");
for (var i = 0; i < arrStr.length; i++) {
var temp = arrStr[i].split("=");
if (temp[0] == objName) return unescape(temp[1]);
}
}
//设置cookie
function addCookie(objName, objValue) {
var str = objName + "=" + escape(objValue)+";path=/";
document.cookie = str;
}
//统一SESSIONid
$(function() {
var ses_key = "PHPSESSID";
getCookie(ses_key) != session_key && addCookie(ses_key, session_key);
});
第三步:在每个页面下引用这些文档
<script language="javascript" type="text/javascript" src="/js/jquery.js"></script>
<script src="http://www.a.com/s.php" type="text/javascript"></script>
<script language="javascript" type="text/javascript" src="/js/s.js"></script>
文章来源: 尚站互联