zoukankan      html  css  js  c++  java
  • 来自腾讯的session跨域,跨服代码

    /**
     * PHP SDK for QQ登录 OpenAPI
     *
     * @version 1.2
     * @author connect@qq.com
     * @copyright © 2011, Tencent Corporation. All rights reserved.
     */
    
    /**
     * @brief 设置session配置 
     */
    
    /**
     * CREATE TABLE `tbl_session` (
     *     `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 = "127.0.0.1"; //需要第三方指定ip地址 
    
        //数据库用户名
        const db_user = "redfox";   //需要第三方指定自己的用户名
    
        //数据库密码
        const db_pwd = "redfox@401"; //需要第三方指定自己的库据库密码
    
        //数据库
        const db_name = "test";      //需要第三方指定数据库
    
        //数据库表
        const db_table = "tbl_session"; //需要第三方指定数据表
    
        //mysql-handle
        private $db_handle;
    
        //session-lifetime
        private $lifeTime;
    
        function open($savePath, $sessName) 
        {
            // get session-lifetime
            $this->lifeTime = get_cfg_var("session.gc_maxlifetime");
    
            // open database-connection
            $db_handle = @mysql_connect(self::db_host, self::db_user, self::db_pwd);
    
            $dbSel = @mysql_select_db(self::db_name, $db_handle);
    
            // return success
            if(!$db_handle || !$dbSel)
                return false;
    
            $this->db_handle = $db_handle;
            return true;
        }
    
        function close() 
        {
            $this->gc(ini_get('session.gc_maxlifetime'));
            // close database-connection
            return @mysql_close($this->db_handle);
        }
    
        function read($sessID) 
        {
            // fetch session-data
            $res = @mysql_query("SELECT session_data AS d FROM ".self::db_table." 
                WHERE session_id = '$sessID'
                AND session_expires > ".time(), $this->db_handle);
    
            // return data or an empty string at failure
            if($row = @mysql_fetch_assoc($res))
                return $row['d'];
    
            return "";
        }
    
        function write($sessID, $sessData) 
        {
            // new session-expire-time
            $newExp = time() + $this->lifeTime;
    
            // is a session with this id in the database?
            $res = @mysql_query("SELECT * FROM ".self::db_table." 
                WHERE session_id = '$sessID'", $this->db_handle);
    
            // if yes,
            if(@mysql_num_rows($res)) 
            {
                // ...update session-data
                @mysql_query("UPDATE ".self::db_table." 
                    SET session_expires = '$newExp',
                    session_data = '$sessData'
                    WHERE session_id = '$sessID'", $this->db_handle);
    
                // if something happened, return true
                if(@mysql_affected_rows($this->db_handle))
                    return true;
            }
            else // if no session-data was found,
            {
                // create a new row
                @mysql_query("INSERT INTO ".self::db_table." (
                    session_id,
                    session_expires,
                    session_data)
                    VALUES(
                        '$sessID',
                        '$newExp',
                        '$sessData')", $this->db_handle);
                // if row was created, return true
                if(@mysql_affected_rows($this->db_handle))
                    return true;
            }
    
            // an unknown error occured
            return false;
        }
    
        function destroy($sessID) 
        {
            // delete session-data
            @mysql_query("DELETE FROM ".self::db_table." WHERE session_id = '$sessID'", $this->db_handle);
    
            // if session was deleted, return true,
            if(@mysql_affected_rows($this->db_handle))
                return true;
    
            // ...else return false
            return false;
        }
    
        function gc($sessMaxLifeTime) 
        {
            // delete old sessions
            @mysql_query("DELETE FROM ".self::db_table." WHERE session_expires < ".time(), $this->db_handle);
    
            // return affected rows
            return @mysql_affected_rows($this->db_handle);
        }
    }
    
    /**
     * 指定session有效的域名
     * ini_set("session.cookie_domain", ".domain.com");
     * .domain.com是站点的主域名,请注意前面个有一个'.'
     */
    define("MAIN_DOMAIN", ".oauth.com");   //设置主域名
    
    /**
     * 不同子域名下共享session信息
     * COOKIE_DOMAIN = false 禁止该功能
     * COOKIE_DOMAIN = true  启用该功能
     * 默认禁止
     * 开启前提需要定义MAIN_DOMAIN常量
     */
    define("COOKIE_DOMAIN", true); 
    if (defined("COOKIE_DOMAIN") && COOKIE_DOMAIN)
    {
        if (defined("MAIN_DOMAIN"))
            @ini_set("session.cookie_domain", MAIN_DOMAIN);
    }
    
    /**
     * 同一个主域名,不同服务器之间共享session信息
     * USER_SESSION = false 禁用该功能
     * USER_SESSION = true  启用该功能
     * 默认禁止
     * 开启前提需要建立mysql数据表
     */
    define("USER_SESSION", false);
    if (defined("USER_SESSION") && USER_SESSION)
    {
        @ini_set("session.save_handler", "user");
        $session = new Session;
        @session_module_name("user");
        @session_set_save_handler(
            array(&$session, "open"),
            array(&$session, "close"),
            array(&$session, "read"),
            array(&$session, "write"),
            array(&$session, "destroy"),
            array(&$session, "gc"));
    }
    
    //@session_id("demo");
    @session_start();
  • 相关阅读:
    C#验证码识别类网上摘抄的
    C#如何用WebClient动态提交文件至Web服务器和设定Http响应超时时间
    C#制作曲线图源码
    在PHP中怎样实现文件下载?
    ASP.NET如何调用Web Service
    MSDN中关于读取web.config的那块,System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString
    饿也要做一个和这个差不多的blog,但功能上有要增强的
    理解能力的高低决定人们的学习能力的高低
    有点困惑了,不知道是从smartClient入手还是从做网站web入手学习.net技术
    什么工厂模式?反射, 晕了,有书吗,推荐推荐.....5555555555555
  • 原文地址:https://www.cnblogs.com/code123/p/3358123.html
Copyright © 2011-2022 走看看