How to handle case-sensitivity of cookie?

K

kelvlam

Hello all,

I'm still a bit new with JavaScript, and I hope the guru here can shed
some light for me. It's regarding handling cookie and the
case-sensitive nature of JavaScript itself.

My problem is how do I handle the "path" parameter in cookie.

First, the sequence start at
http://www.testServer1.com/TestApp/page1.htm, and a cookie is set at
that page.

Then, the following page, somehow change the case on the path, such as
http://www.testServer1.com/testApp/page2.htm. Now in this page, I
cannot access to the cookie that's set at the first initial page.

Is there anyway to handle this kind of scenario? I hope I'm explaining
the problem correctly.

Thank you in advance.
Kelvin
 
R

Randy Webb

kelvlam said the following on 8/21/2006 2:20 PM:
Hello all,

I'm still a bit new with JavaScript, and I hope the guru here can shed
some light for me. It's regarding handling cookie and the
case-sensitive nature of JavaScript itself.

My problem is how do I handle the "path" parameter in cookie.

First, the sequence start at
http://www.testServer1.com/TestApp/page1.htm, and a cookie is set at
that page.

Then, the following page, somehow change the case on the path, such as
http://www.testServer1.com/testApp/page2.htm. Now in this page, I
cannot access to the cookie that's set at the first initial page.

Is there anyway to handle this kind of scenario? I hope I'm explaining
the problem correctly.

Set it to lower case, then test it.

cookieString.toLowerCase()
 
K

kelvlam

Randy said:
kelvlam said the following on 8/21/2006 2:20 PM:

Set it to lower case, then test it.

cookieString.toLowerCase()

So should I be doing toLowercase both when setting and getting?

i.e. document.cookie = cookieStr.toLowerCase();

and for my get, I should just set the search parameter to
param.toLowerCase() and then do the string comparison?



I want to elaborate a little bit more of why I'm asking this question
also, and give some precious description of my problem.

The problem is I have no control of how a client browser access my web
site. They could be coming in as "http://www.testAbc.com/site1", or
they can be coming in as "http://www.testAbc.com/SiTe1". The site's
Index.htm page then redirect the incoming request, to a internal ISAPI
call on the IIS server.

For example when a client come in from the browser as
"http://www.testAbc.com/SiTe1", all cookies created will be only be
accessible for pages that contain "http://www.testAbc.com/SiTe1" in the
window.location property, correct? Since all my pages are generated
dynamically by the ISAPI DLL, the window.location property could be
change without my notice... and if the page somehow got
"http://www.testAbc.com/site1" stored in the window.location property,
then I won't be able to access the cookie that I intended to.

Sorry for my very broken English. It's really hard to try to explain
technical detail when I have still a fairly limited understanding of
JavaScript. I hope I didn't confuse the original problem...

Much appreciate for the help in advance.
 
K

kelvlam

kelvlam said:
So should I be doing toLowercase both when setting and getting?

i.e. document.cookie = cookieStr.toLowerCase();

and for my get, I should just set the search parameter to
param.toLowerCase() and then do the string comparison?



I want to elaborate a little bit more of why I'm asking this question
also, and give some precious description of my problem.

The problem is I have no control of how a client browser access my web
site. They could be coming in as "http://www.testAbc.com/site1", or
they can be coming in as "http://www.testAbc.com/SiTe1". The site's
Index.htm page then redirect the incoming request, to a internal ISAPI
call on the IIS server.

For example when a client come in from the browser as
"http://www.testAbc.com/SiTe1", all cookies created will be only be
accessible for pages that contain "http://www.testAbc.com/SiTe1" in the
window.location property, correct? Since all my pages are generated
dynamically by the ISAPI DLL, the window.location property could be
change without my notice... and if the page somehow got
"http://www.testAbc.com/site1" stored in the window.location property,
then I won't be able to access the cookie that I intended to.

Sorry for my very broken English. It's really hard to try to explain
technical detail when I have still a fairly limited understanding of
JavaScript. I hope I didn't confuse the original problem...

Much appreciate for the help in advance.

I would like to point out, I've been using these common utilities
function as well, for handling my cookie within the pages. Maybe I can
tweak these utility functions to solve my problem?

<pre>
/**
* Sets a Cookie with the given name and value.
*
* name Name of the cookie
* value Value of the cookie
* [expires] Expiration date of the cookie (default: end of current
session)
* [path] Path where the cookie is valid (default: path of calling
document)
* [domain] Domain where the cookie is valid (default: domain of
calling document)
* [secure] Boolean value indicating if the cookie transmission
requires a secure transmission
*/
function setCookie(name, value, expires, path, domain, secure) {
var cookieStr;
cookieStr = name + "=" + escape(value);
cookieStr += ((expires) ? "; expires=" + expires.toGMTString() : "");
cookieStr += ((path) ? "; path=" + path : "");
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += ((secure) ? "; secure" : "");
document.cookie = cookieStr;
}
/**
* Gets the value of the specified cookie.
*
* name Name of the desired cookie.
*
* Returns a string containing value of specified cookie,
* or null if cookie does not exist.
*/
function getCookie(name) {
var dc = document.cookie;
var prefix = name.toLowerCase() + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}
/**
* Deletes the specified cookie.
*
* name name of the cookie
* [path] path of the cookie (must be same as path used to create
cookie)
* [domain] domain of the cookie (must be same as domain used to create
cookie)
*/
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
var cookieStr;
cookieStr = name.toLowerCase() + "=";
cookieStr += ((path) ? "; path=" + path : ""); //defaultPath);
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += "; expires=Thu, 01-Jan-70 00:00:01 GMT";
document.cookie = cookieStr;
}
}
</pre>
 
R

randall.carr

Good info. I will be in touch.
kelvlam said:
kelvlam said:
So should I be doing toLowercase both when setting and getting?

i.e. document.cookie = cookieStr.toLowerCase();

and for my get, I should just set the search parameter to
param.toLowerCase() and then do the string comparison?



I want to elaborate a little bit more of why I'm asking this question
also, and give some precious description of my problem.

The problem is I have no control of how a client browser access my web
site. They could be coming in as "http://www.testAbc.com/site1", or
they can be coming in as "http://www.testAbc.com/SiTe1". The site's
Index.htm page then redirect the incoming request, to a internal ISAPI
call on the IIS server.

For example when a client come in from the browser as
"http://www.testAbc.com/SiTe1", all cookies created will be only be
accessible for pages that contain "http://www.testAbc.com/SiTe1" in the
window.location property, correct? Since all my pages are generated
dynamically by the ISAPI DLL, the window.location property could be
change without my notice... and if the page somehow got
"http://www.testAbc.com/site1" stored in the window.location property,
then I won't be able to access the cookie that I intended to.

Sorry for my very broken English. It's really hard to try to explain
technical detail when I have still a fairly limited understanding of
JavaScript. I hope I didn't confuse the original problem...

Much appreciate for the help in advance.

I would like to point out, I've been using these common utilities
function as well, for handling my cookie within the pages. Maybe I can
tweak these utility functions to solve my problem?

<pre>
/**
* Sets a Cookie with the given name and value.
*
* name Name of the cookie
* value Value of the cookie
* [expires] Expiration date of the cookie (default: end of current
session)
* [path] Path where the cookie is valid (default: path of calling
document)
* [domain] Domain where the cookie is valid (default: domain of
calling document)
* [secure] Boolean value indicating if the cookie transmission
requires a secure transmission
*/
function setCookie(name, value, expires, path, domain, secure) {
var cookieStr;
cookieStr = name + "=" + escape(value);
cookieStr += ((expires) ? "; expires=" + expires.toGMTString() : "");
cookieStr += ((path) ? "; path=" + path : "");
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += ((secure) ? "; secure" : "");
document.cookie = cookieStr;
}
/**
* Gets the value of the specified cookie.
*
* name Name of the desired cookie.
*
* Returns a string containing value of specified cookie,
* or null if cookie does not exist.
*/
function getCookie(name) {
var dc = document.cookie;
var prefix = name.toLowerCase() + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}
/**
* Deletes the specified cookie.
*
* name name of the cookie
* [path] path of the cookie (must be same as path used to create
cookie)
* [domain] domain of the cookie (must be same as domain used to create
cookie)
*/
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
var cookieStr;
cookieStr = name.toLowerCase() + "=";
cookieStr += ((path) ? "; path=" + path : ""); //defaultPath);
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += "; expires=Thu, 01-Jan-70 00:00:01 GMT";
document.cookie = cookieStr;
}
}
</pre>
 
R

randall.carr

kelvlam said:
kelvlam said:
So should I be doing toLowercase both when setting and getting?

i.e. document.cookie = cookieStr.toLowerCase();

and for my get, I should just set the search parameter to
param.toLowerCase() and then do the string comparison?



I want to elaborate a little bit more of why I'm asking this question
also, and give some precious description of my problem.

The problem is I have no control of how a client browser access my web
site. They could be coming in as "http://www.testAbc.com/site1", or
they can be coming in as "http://www.testAbc.com/SiTe1". The site's
Index.htm page then redirect the incoming request, to a internal ISAPI
call on the IIS server.

For example when a client come in from the browser as
"http://www.testAbc.com/SiTe1", all cookies created will be only be
accessible for pages that contain "http://www.testAbc.com/SiTe1" in the
window.location property, correct? Since all my pages are generated
dynamically by the ISAPI DLL, the window.location property could be
change without my notice... and if the page somehow got
"http://www.testAbc.com/site1" stored in the window.location property,
then I won't be able to access the cookie that I intended to.

Sorry for my very broken English. It's really hard to try to explain
technical detail when I have still a fairly limited understanding of
JavaScript. I hope I didn't confuse the original problem...

Much appreciate for the help in advance.

I would like to point out, I've been using these common utilities
function as well, for handling my cookie within the pages. Maybe I can
tweak these utility functions to solve my problem?

<pre>
/**
* Sets a Cookie with the given name and value.
*
* name Name of the cookie
* value Value of the cookie
* [expires] Expiration date of the cookie (default: end of current
session)
* [path] Path where the cookie is valid (default: path of calling
document)
* [domain] Domain where the cookie is valid (default: domain of
calling document)
* [secure] Boolean value indicating if the cookie transmission
requires a secure transmission
*/
function setCookie(name, value, expires, path, domain, secure) {
var cookieStr;
cookieStr = name + "=" + escape(value);
cookieStr += ((expires) ? "; expires=" + expires.toGMTString() : "");
cookieStr += ((path) ? "; path=" + path : "");
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += ((secure) ? "; secure" : "");
document.cookie = cookieStr;
}
/**
* Gets the value of the specified cookie.
*
* name Name of the desired cookie.
*
* Returns a string containing value of specified cookie,
* or null if cookie does not exist.
*/
function getCookie(name) {
var dc = document.cookie;
var prefix = name.toLowerCase() + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}
/**
* Deletes the specified cookie.
*
* name name of the cookie
* [path] path of the cookie (must be same as path used to create
cookie)
* [domain] domain of the cookie (must be same as domain used to create
cookie)
*/
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
var cookieStr;
cookieStr = name.toLowerCase() + "=";
cookieStr += ((path) ? "; path=" + path : ""); //defaultPath);
cookieStr += ((domain) ? "; domain=" + domain : "");
cookieStr += "; expires=Thu, 01-Jan-70 00:00:01 GMT";
document.cookie = cookieStr;
}
}
</pre>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top