Как я могу установить cookie для нескольких доменов, используя javascript + уже в системном существующем коде ColdFusion, через плагин Bjron Holines Store Locator - PullRequest
0 голосов
/ 21 сентября 2019

Для представления локатора магазина я использую плагин Bjorn Holines Store Locator.Этот плагин имеет HTML-шаблон, который создает список, кроме карты всех магазинов с подробной информацией.Я добавил кнопку в этот шаблон.Цель состоит в том, чтобы сохранить куки с идентификатором конкретной ветви при нажатии этой кнопки.Этот файл cookie должен быть установлен на нескольких доменах (без поддоменов).Я создал функцию для вызова CFC.Этот cfc вызывает уже существующий пользовательский тег, в котором файлы cookie устанавливаются с помощью img scr = "...".Обратите внимание, что у меня нет никакого опыта или знаний AJAX / JSON вообще.Я вижу много препятствий;returnformat, returntypes, cfoutputs, img, cfsavecontent, возвращаемое значение, вызывающее пользовательский тег и т. д. Используя этот код, я получаю TRUE в качестве результата + предупреждение javascript, но, очевидно, файлы cookie не сохраняются.Как я могу использовать этот уже существующий пользовательский тег для установки файлов cookie?Это вообще возможно?

Кнопка + функция в шаблоне hmtl:

<button type="button" class="btn btn-sm" id="voorkeur" onClick="setCookie('{{branch}}','{{name}}')">Als voorkeur instellen</button>
<script>
    function setCookie(branch, name) {
        $.ajax({
            url: "siteparts/branch/setCookieMultipleDomains.cfc"
            , type: "POST"
            , dataType: "json"
            , data: {"method" : "setCookie", "returnFormat": "json", "branch": branch}
        }).done(function(response) {
            console.log("response", response);
            alert('Uw voorkeur voor ' + name + ' is opgeslagen.');
        }).fail(function(jqXHR, textStatus, errorMessage) {
            console.log("errorMessage",errorMessage);
        });
    }
</script>

CFC setCookieMultipleDomains.cfc:

<cfcomponent>   
    <cffunction name="setCookie" returntype="struct" access="remote">
       <cfargument name="branch" type="string" required="true">

       <cfset lresponse = {success=true}>

       <cftry>
          <CF_CU_cookieding action="setCookies" branch="#branch#" ret="qGetCookies"> --->
            <cfcatch>    
                <cfset lresponse = {success=false}>
            </cfcatch>
        </cftry>

       <cfreturn lresponse>
    </cffunction>
</cfcomponent>

Пользовательский тег CF_CU_cookieding.cfm:

<cfsetting enablecfoutputonly="yes">
<cfparam name="attributes.action" default="">
<cfparam name="attributes.branch" default="">
<cfparam name="attributes.ret" default="">

<cfif attributes.action eq "setCookies">    
    <cfsavecontent variable="thecontent">
        <cfoutput><img src="https://www.domain1.com/scripts/ajax/save/setCookie.cfm<cfif attributes.branch neq "">?branch=#attributes.branch#</cfif>" width="1" height="1"></cfoutput>
        <cfoutput><img src="https://www.domain2.com/scripts/ajax/save/setCookie.cfm<cfif attributes.branch neq "">?branch=#attributes.branch#</cfif>" width="1" height="1"></cfoutput>
        <cfoutput><img src="https://www.domain3.com/scripts/ajax/save/setCookie.cfm<cfif attributes.branch neq "">?branch=#attributes.branch#</cfif>" width="1" height="1"></cfoutput>
        <cfoutput><img src="https://www.domain4.com/scripts/ajax/save/setCookie.cfm<cfif attributes.branch neq "">?branch=#attributes.branch#</cfif>" width="1" height="1"></cfoutput>
    </cfsavecontent>
    <cfif attributes.ret neq "">
        <cfset setvariable("caller.#attributes.ret#", thecontent)>
    <cfelse>
        <cfoutput>#thecontent#</cfoutput>
    </cfif> 

<cfelseif attributes.action eq "createCookie">
    <cfcookie name="d_cookie_ok" value="1" expires="never"> 
    <cfif attributes.branch neq "">
        <cfcookie name="d_cookie_branch" value="#attributes.branch#" expires="never">   
    </cfif>

</cfif>

И набор изображений: Cookie.cfm:

<cfparam name="request.branch" default="">

<cfif request.branch neq "">
    <CF_CU_cookieding action="createCookie" branch="#request.branch#">
<cfelse>
    <CF_CU_cookieding action="createCookie">
</cfif>

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Исправлено с помощью возвращаемого значения qGetCookies пользовательского тега cu_cookieding.В моем cfc я изменил возвращаемый тип на «любой».Я удалил qGetCookies из ненужного текста, чтобы разделить только путь к img, запятую.Отправьте ответ обратно.В JavaScript в шаблоне HTML я добавил div для будущих изображений.Я создал массив из ответа CFC.Прокручивая массив для создания изображения.Теперь файлы cookie настроены для нескольких доменов

cfc:

<cfcomponent>   
    <cffunction name="setCookie" returntype="any" access="remote">
        <cfargument name="branch" type="string" required="true">

        <cftry>
            <CF_CU_cookieding action="setCookies" branch="#branch#" ret="qGetCookies"> 
            <cfcatch>    
                <cfset lresponse = {success=false}>
            </cfcatch>
        </cftry>
        <cfset lresponse = replace(qGetCookies,'><','>,<','all')>
        <cfset lresponse = replace(lresponse, '<img src="','','all')>
        <cfset lresponse = replace(lresponse,'" width="1" height="1">','','all')>
        <cfreturn lresponse>
    </cffunction>
</cfcomponent> 

HTML-шаблон:

{{#location}}
<li data-markerid="{{markerid}}">
    <div class="list-label"><img src="{{marker}}" /></div>
    <div class="list-details">
        <div class="list-content">
            <div class="loc-name">{{name}}</div>
            <div class="loc-addr">{{address}}</div>
            {{#if address2}}
                <div class="loc-addr2">{{address2}}</div>
            {{/if}}
            <div class="loc-addr3">{{postal}} {{city}}</div>
            {{#if web}}
                <div class="loc-web"><a href="http://{{web}}" target="_blank">{{niceURL web}}</a></div>
            {{/if}}
            {{#if distance}}
                <div class="loc-dist loc-default-dist">{{distance}} {{length}}</div>
                {{#if altdistance}}<div class="loc-dist loc-alt-dist">{{altdistance}} {{altlength}}</div>
                {{/if}}
            {{/if}}
            <div class="loc-directions"><a href="https://maps.google.com/maps?saddr={{origin}}&amp;daddr={{address}} {{address2}} {{city}}, {{state}} {{postal}}" target="_blank">Route</a></div>
            <div id="cImgHolder"></div>
            <button type="button" class="btn btn-sm" id="voorkeur" onClick="setCookie('{{branch}}','{{name}}')">Als voorkeur instellen</button>
            <script>
                function setCookie(branch, name) {
                        $.ajax({
                            url: "decokay2015/siteparts/branch/setCookieMultipleDomains.cfc"
                            , type: "POST"
                            , dataType: "json"
                            , data: {"method" : "setCookie", "returnFormat": "json", "branch": branch}
                        }).done(function(response) {
                            console.log("response", response);
                            var cArr = response.split(',');
                            console.log("cArr", cArr);
                            for (var i = 0; i < cArr.length; i++) {
                                var elem = document.createElement("img");
                                elem.setAttribute("src", cArr[i]);
                                elem.setAttribute("height", "1");
                                elem.setAttribute("width", "1");
                                document.getElementById("cImgHolder").appendChild(elem);
                            }  
                            alert('Uw voorkeur voor ' + name + ' is opgeslagen.');
                        }).fail(function(jqXHR, textStatus, errorMessage) {
                           console.log("errorMessage",errorMessage);
                        });                 
                }
            </script>

        </div>
    </div>
</li>
{{/location}}
0 голосов
/ 21 сентября 2019

вы не можете устанавливать куки в разных доменах, вы можете обойти это, используя настройки субдомена, если у вас есть такой доступ к DNS.

example.com this.example.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...