php跨域共享session

$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_module_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_dump($SESS_DBH);
36
    $qry = "select session_data from sessions where session_id = ‘$key‘ ";
37
    $qid = mysql_query($qry, $SESS_DBH);
38
//      var_dump($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_module_name();
74
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write","sess_destroy", "sess_gc");
75
session_start();
时间: 2024-08-14 22:01:53

php跨域共享session的相关文章

session跨域共享解决方案

要让session跨域共享,需要解决三个问题: 1.通过什么方法来传递session_id? 2.通过什么方法来保存session信息? 3.通过什么方法来进行跨域 一.传递session_id有4种方法 1. 通过cookie 2. 设置php.ini中的session.use_trans_sid=1,让PHP自动跨页传递session id 3. 手动通过url或隐藏表单传值 4. 用文件或数据库方式传递,在通过其他key对应取值 二.保存session信息有3种方法 1.数据库 2.mem

使用Spring Session和Redis解决分布式Session跨域共享问题

前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因此会出现session不同步或者丢失的问题. 文末分享了我一部分私人收藏 有兴趣的可以收藏看一下的 都是架构师进阶的内容 实际上实现Session共享的方案很多,其中一种常用的就是使用Tomcat.Jetty等服务器提供的Session共享功能,将Sessi

Redis实战和核心原理详解(5)使用Spring Session和Redis解决分布式Session跨域共享问题

Redis实战和核心原理详解(6)使用Spring Session和Redis解决分布式Session跨域共享问题 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因此会出现session不同步或者丢失的问题. 实际上实现Session共享的方案很多,其中一种常用的就是使用Tomcat.Jetty等服务器提

URL资源跨域访问 跨域使用session信息

SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源. 下表列出了Silverlight 2.0 中 URL 访问规则:   WebClient对象 Media.images.ASX XAML 文件.Font 文件 流媒体 允许的协议 HTTP, HTTPS HTTP, HTTPS, FILE HTTP, HTTPS, FILE HTTP 跨协议访问 不允许 不允许 不允许 不允许来自HTTPS的访问 跨Web域访问 不允许 如果不

在ExpressJS中设置二级域名跨域共享Cookie

问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.session({ secret: conf.secret, maxAge: new Date(Date.now() + 3600000), cookie: { path: ‘/‘ }, store: new MongoStore(conf.db) })); }); 我已经在上面设置了cookie路径.但

通过jsonp解决浏览器的跨域共享

因为浏览器的同源策略,普通ajax访问跨域请求返回的json数据是不会被浏览器接受的.看下面例子可以看出是访问不到的 首先 定义webapi 后台代码 public class JsopController : ApiController { public IHttpActionResult GetAlluser() { User[] contacts = new User[] { new User{ Name="123", PhoneNo="111", Email

asp.net forms 表单验证 实现跨域共享cookie(即SSO,单点登录(在二级域名下))

1.前提: 需要做一个单点登录,使用asp.net自带的表单验证(FormsAuthentication) 配置文件怎么写,如下(基本的): <authentication mode="Forms"> <forms loginUrl="~/user/login" enableCrossAppRedirects="true" timeout="3600" name="qz.bbs" cook

跨域共享cookie

1. JSP中Cookie的读写 Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息.Cookie还有一些附加信息,比如域名.有效时间.注释等等. 下面是一个jsp中写入读取Cookie的测试:在顶级域名中写入Cookie,在子域名中读取,目的是实现一个分布系统的单点登录. 两个jsp中读写代码如下: 写入: <% Cookie cookie = newCookie("write","cookie_write")

Asp.Net 跨域,Asp.Net MVC 跨域,Session共享

比如 http://www.test.com 和 http://m.test.com 简单粗暴的方法 Web.Config <system.web> <!--其他配置 省略……--> <httpCookies domain="test.com" /><!--同一顶级域名--> </system.web> <handlers> <!--其他配置 省略……--> <!--<remove name