Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #35840 > unrolled thread
| Started by | groovee@cyberdude.com |
|---|---|
| First post | 2018-11-20 23:33 -0800 |
| Last post | 2018-11-24 06:11 -0800 |
| Articles | 6 — 4 participants |
Back to article view | Back to comp.lang.javascript
Accessing the value of a cookie groovee@cyberdude.com - 2018-11-20 23:33 -0800
Re: Accessing the value of a cookie JJ <jj4public@vfemail.net> - 2018-11-21 16:03 +0700
Re: Accessing the value of a cookie Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-11-21 12:37 +0000
Re: Accessing the value of a cookie groovee@cyberdude.com - 2018-11-22 00:56 -0800
Re: Accessing the value of a cookie Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-11-22 12:22 +0000
Re: Accessing the value of a cookie Julio Di Egidio <julio@diegidio.name> - 2018-11-24 06:11 -0800
| From | groovee@cyberdude.com |
|---|---|
| Date | 2018-11-20 23:33 -0800 |
| Subject | Accessing the value of a cookie |
| Message-ID | <f11ea23c-05c7-4b52-8f52-c66912ac1e4e@googlegroups.com> |
I was trying to check whether a cookie is set to a particular value or not (on the client side, in JS), and found this code on MDN:
if (document.cookie.split(';').filter((item) => item.includes('reader=1')).length) {
console.log('The cookie "reader" has "1" for value')
}
What I'd like to know is - what's the ".length" at the end for? I'm trying to get the VALUE of the cookie, why would it's *length* be required?
[toc] | [next] | [standalone]
| From | JJ <jj4public@vfemail.net> |
|---|---|
| Date | 2018-11-21 16:03 +0700 |
| Message-ID | <fl3lwtx9zhux$.cipgw2qtxmi8$.dlg@40tude.net> |
| In reply to | #35840 |
On Tue, 20 Nov 2018 23:33:51 -0800 (PST), groovee@cyberdude.com wrote:
> I was trying to check whether a cookie is set to a particular value or not (on the client side, in JS), and found this code on MDN:
>
> if (document.cookie.split(';').filter((item) => item.includes('reader=1')).length) {
> console.log('The cookie "reader" has "1" for value')
> }
>
> What I'd like to know is - what's the ".length" at the end for? I'm trying to get the VALUE of the cookie, why would it's *length* be required?
See:
<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter>
Hint: bookmark that site and use it as JavaScript reference. It'll save you
so much time.
[toc] | [prev] | [next] | [standalone]
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Date | 2018-11-21 12:37 +0000 |
| Message-ID | <87lg5md2sj.fsf@bsb.me.uk> |
| In reply to | #35840 |
groovee@cyberdude.com writes:
> I was trying to check whether a cookie is set to a particular value or
> not (on the client side, in JS), and found this code on MDN:
>
> if (document.cookie.split(';').filter(
> (item) => item.includes('reader=1')).length) {
> console.log('The cookie "reader" has "1" for value')
> }
> What I'd like to know is - what's the ".length" at the end for? I'm
> trying to get the VALUE of the cookie, why would it's *length* be
> required?
You are trying to do something different, so you won't want to know how
many items get past the filter, which is what the length test is for.
The original code (which you altered) is intended to find out if a key
exists, not what value it has.
You changed "reader=" to "reader=1", but that might not do do what you
think it does because the inner "includes" test will succeed when
reader=11 is in the string. Mind you, the original code is also a bit
dodgy since it accepts "xyzreader=" as well as "reader=".
If you need to get the key=value pairs you should split on /;[ \t]*/,
and if you need to test for a specific key you should check that the
pair starts with the required key. Mind you, a regexp could give you a
quick check for existence:
document.cookie.match(/(:?^|;[ \t]*)reader=/)
(Don't rely on this being safe -- to get the right regexp you'd need to
(a) read the spec, and (b) also know if there are any user agents out
there that don't conform!)
--
Ben.
[toc] | [prev] | [next] | [standalone]
| From | groovee@cyberdude.com |
|---|---|
| Date | 2018-11-22 00:56 -0800 |
| Message-ID | <f676846e-367a-483e-81ed-6ff68ec3ae7c@googlegroups.com> |
| In reply to | #35845 |
On Wednesday, 21 November 2018 18:07:55 UTC+5:30, Ben Bacarisse wrote: > The original code (which you altered) is intended to find out if a key > exists, not what value it has. I did not! This page, look at Example 6 (I have a feeling you were looking at 5!): https://developer.mozilla.org/en-US/docs/Web/API/document/cookie
[toc] | [prev] | [next] | [standalone]
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Date | 2018-11-22 12:22 +0000 |
| Message-ID | <87y39l9u9r.fsf@bsb.me.uk> |
| In reply to | #35848 |
groovee@cyberdude.com writes: > On Wednesday, 21 November 2018 18:07:55 UTC+5:30, Ben Bacarisse wrote: > >> The original code (which you altered) is intended to find out if a key >> exists, not what value it has. > > I did not! This page, look at Example 6 (I have a feeling you were > looking at 5!): Yes, you are right -- I was looking at the very similar previous example. Sorry about that. The code shown in both exercises does not do what it purports to do. Don't copy it. It did not occur to me that such a bad example would be given on the MDN website and I should therefore also apologise for assuming you'd written anything that bad! > https://developer.mozilla.org/en-US/docs/Web/API/document/cookie -- Ben.
[toc] | [prev] | [next] | [standalone]
| From | Julio Di Egidio <julio@diegidio.name> |
|---|---|
| Date | 2018-11-24 06:11 -0800 |
| Message-ID | <7722e7b9-8477-48ca-bc4a-9bec2a886234@googlegroups.com> |
| In reply to | #35840 |
On Wednesday, 21 November 2018 08:34:01 UTC+1, gro...@cyberdude.com wrote:
> I was trying to check whether a cookie is set to a particular value or not
> (on the client side, in JS), and found this code on MDN:
The code in those examples (and in technical examples in general) is *not*
meant to be *production-ready*.
For your benefit, follows an example of the code I am using in production:
it is not totally abstract nor particularly sophisticated, but I'd think at
least the cookie handling logic is correct to the standard:
--------------------------------------------------------------
function $SettingNeverExpires()
{
// virtually unlimited
var expires = new Date();
expires.setFullYear(expires.getFullYear() + 1);
return expires;
}
function $loadSettings(itemCb) // calls itemCb per each name-value
{
var cookies = $doc.cookie.split(";");
for (var i = 0; i < cookies.length; ++i)
{
var pair = cookies[i].split("=");
if (pair.length === 2)
{
var name = decodeURIComponent(pair[0]).trim();
var value = decodeURIComponent(pair[1]).trim();
itemCb(name, value);
}
}
}
function $saveSettings(dict) // dict is simply an object
{
var exp = $SettingNeverExpires().toUTCString();
for (var key in dict)
{
var name = encodeURIComponent(key);
var value = encodeURIComponent(dict[key]);
$doc.cookie = name + "=" + value + "; expires=" + exp;
}
}
--------------------------------------------------------------
Feel free to peruse. And, everybody, please feel free to nitpick...
Thanks,
Julio
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web