zoukankan      html  css  js  c++  java
  • cms绑定二级域名后,会员登录后,无法评论,cms里不是登录状态

    这是因为你绑定二级域名后,Cookie域不同了,可以通过以下修改来实现同域。

    首先需要打开application/config.php

    修改其中的url_domain_deploy改为true

    因为我们是多域名了,还需要设置sessioncookie的域名,如下:

    'session'                => [
        'id'             => '',
        // SESSION_ID的提交变量,解决flash上传跨域
        'var_session_id' => '',
        // SESSION 前缀
        'prefix'         => 'think',
        // 驱动方式 支持redis memcache memcached
        'type'           => '',
        // 是否自动开启 SESSION
        'auto_start'     => true,
        // SESSION存储目录,可选
        //'path'           => RUNTIME_PATH . 'session',
        // 共享域名
        'domain'         => 'yoursite.com'
    ],
    'cookie'                 => [
        // cookie 名称前缀
        'prefix'    => '',
        // cookie 保存时间
        'expire'    => 0,
        // cookie 保存路径
        'path'      => '/',
        // cookie 有效域名
        'domain'    => 'yoursite.com',
        //  cookie 启用安全传输
        'secure'    => false,
        // httponly设置
        'httponly'  => true,
        // 是否使用 setcookie
        'setcookie' => true,
    ],

    注意domain为你的根域名

    配置完成后注意清除runtime的缓存和浏览器缓存,包含Cookie信息都需要清除。

    跨域说明

    如果你有其它页面接口调用api.yoursite.com时可能出现跨域问题,我们可以修改/public/assets/js/fast.js,修改其中的Fast.api.ajax方法,修改为

    ajax: function (options, success, error) {
        options = typeof options === 'string' ? {url: options} : options;
        var index = Layer.load();
        options = $.extend({
            type: "POST",
            dataType: "json",
            xhrFields: {
                withCredentials: true
            },
            success: function (ret) {
                Layer.close(index);
                ret = Fast.events.onAjaxResponse(ret);
                if (ret.code === 1) {
                    Fast.events.onAjaxSuccess(ret, success);
                } else {
                    Fast.events.onAjaxError(ret, error);
                }
            },
            error: function (xhr) {
                Layer.close(index);
                var ret = {code: xhr.status, msg: xhr.statusText, data: null};
                Fast.events.onAjaxError(ret, error);
            }
        }, options);
        $.ajax(options);
    },

    其中的

    xhrFields: {
        withCredentials: true
    },

    是我们新增加的代码,注意因为涉及修改了核心文件,需要使用php think min -m all -r js重新压缩打包下JS代码

    然后我们再修改我们Api的基类application/common/controller/Api.php,在_initialize中添加以下代码

    if (isset($_SERVER['HTTP_ORIGIN'])) {
        header("Access-Control-Allow-Origin: " . $this->request->server('HTTP_ORIGIN'));
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');    // cache for 1 day
    }
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
            header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    }

    即可。

  • 相关阅读:
    关于int8_t,uint8_t.....等数据类型的理解
    导出函数__declspec(dllexport)
    c++中的namespace
    GitHub C 和 C++ 开源库的清单(含示例代码)
    进制之间的转换一
    为 JSON 字符串创建对象
    HTML5 简单Demo1
    主要浏览器的调试工具
    fiddler2抓包工具使用图文教程
    JAVA将秒的总和转换成时分秒的格式
  • 原文地址:https://www.cnblogs.com/apolloren/p/12290507.html
Copyright © 2011-2022 走看看