Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to strip out a url variable

Tags:

coldfusion

I have a url.LoginID, and I'd like to remove it from the address bar when the user clicks on the link to login. It has to be a bookmark, it can't be a form submit.

Q: How do I remove ?LoginID from Index.cfm?LoginID=XYZ&AssignmentID=123

It's probably something along the lines of:

<cflocation url="#cgi.SCRIPT_NAME#?#cgi.QUERY_STRING#" addtoken="no">
like image 647
Phillip Senn Avatar asked Nov 27 '22 07:11

Phillip Senn


2 Answers

Looks like you are on the right track.

If loginID is the only thing in the query string, you can simply cflocation to the destination page without the query string.

If there is other data in the query string, then you can do something like this:

<cfset q = reReplaceNoCase(cgi.query_string, "LOGINID=[^&]+&?", "")>
<cflocation url="#cgi.SCRIPT_NAME#?#q#">

This essentially removes loginid and everything until either the en of the string or the next URL variable.

like image 119
Ben Doom Avatar answered Nov 29 '22 23:11

Ben Doom


As usual, there's already a UDF that someone has written available on CFLIB: queryStringDeleteVar

You can then do like so

<cflocation 
    url="#cgi.SCRIPT_NAME#?#queryStringDeleteVar("LoginID",cgi.QUERY_STRING)#" 
    addtoken="no"
>

CGI.QUERY_STRING is actually the default for the second arg, so this will work just as well

<cflocation 
    url="#cgi.SCRIPT_NAME#?#queryStringDeleteVar("LoginID")#" 
    addtoken="no"
>

Here's the code for queryStringDeleteVar:

<cfscript>
/**
 * Deletes a var from a query string.
 * Idea for multiple args from Michael Stephenson ([email protected])
 * 
 * @param variable      A variable, or a list of variables, to delete from the query string. 
 * @param qs      Query string to modify. Defaults to CGI.QUERY_STRING. 
 * @return Returns a string. 
 * @author Nathan Dintenfass ([email protected]@changemedia.com) 
 * @version 1.1, February 24, 2002 
 */
function queryStringDeleteVar(variable){
    //var to hold the final string
    var string = "";
    //vars for use in the loop, so we don't have to evaluate lists and arrays more than once
    var ii = 1;
    var thisVar = "";
    var thisIndex = "";
    var array = "";
    //if there is a second argument, use that as the query string, otherwise default to cgi.query_string
    var qs = cgi.query_string;
    if(arrayLen(arguments) GT 1)
        qs = arguments[2];
    //put the query string into an array for easier looping
    array = listToArray(qs,"&");        
    //now, loop over the array and rebuild the string
    for(ii = 1; ii lte arrayLen(array); ii = ii + 1){
        thisIndex = array[ii];
        thisVar = listFirst(thisIndex,"=");
        //if this is the var, edit it to the value, otherwise, just append
        if(not listFind(variable,thisVar))
            string = listAppend(string,thisIndex,"&");
    }
    //return the string
    return string;
}
</cfscript>
like image 24
ale Avatar answered Nov 29 '22 21:11

ale