Thursday, January 27, 2011

Odd RequestHandler->isAjax evaluation during ajax request in webkit browsers

Hi,
yesterday I noticed some odd behavior of my web app while testing it
in Safari:
Here is the line of code in my controller where it all the weirdness
happens:

if (!$this->RequestHandler->isAjax()) {
$this->Session->write('Auth.User.activeRecordId', NO_ID);
$this->Session->write('Auth.User.isajax', 'false'); // for
better readability
}

I'm trying to decide if my variable should be '__noId__' for "this is
the first time I get called so I have no ID yet" or ''this is ajax,
leave this var alone"

Normally this should be turn out to be true (no ajax) only in the very
first request which is a GET. The subsequent requests which are kicked
off automatically, are ajax calls, the first against the same index
action, the second one against the view action of the same controller.
Done ... normally. Looking into Safari one strange behavior came to
light (as opposed to Firefox): Safari sets up sometimes one, sometimes
even two additional requests AFTER the /controller/view request, which
are considered by the server to be GET requests - so my var is written
over;((
I traced this down with $this->log right in the Sessions write method:

Safari:

0011-01-28 03:15:19 Debug: write into session: Config.time =>
1296192919
2011-01-28 03:15:19 Debug: write into session:
Auth.User.activeRecordId => __noid__
2011-01-28 03:15:19 Debug: write into session: Auth.User.isajax =>
false
2011-01-28 03:15:19 Debug: write into session: url.url => /
2011-01-28 03:15:19 Debug: write into session: url.page => 1
2011-01-28 03:15:19 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:15:26 Debug: write into session: Config.time =>
1296192926
2011-01-28 03:15:26 Debug: write into session: Acl.error.status => 200
2011-01-28 03:15:26 Debug: write into session: Message.flash => Array
2011-01-28 03:15:26 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:15:27 Debug: write into session: Config.time =>
1296192926
2011-01-28 03:15:27 Debug: write into session: Auth.User.isajax =>
true
2011-01-28 03:15:27 Debug: write into session: url.url => products/
index/all
2011-01-28 03:15:27 Debug: write into session: url.page => 1
2011-01-28 03:15:27 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:15:27 Debug: write into session: Config.time =>
1296192927
2011-01-28 03:15:27 Debug: write into session:
Auth.User.activeRecordId => 4d390234-9804-4e0a-af50-71dcc0a8010b
2011-01-28 03:15:27 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:15:28 Debug: write into session: Config.time =>
1296192927
2011-01-28 03:15:28 Debug: write into session:
Auth.User.activeRecordId => __noid__
2011-01-28 03:15:28 Debug: write into session: Auth.User.isajax =>
false
2011-01-28 03:15:28 Debug: write into session: url.url => /
2011-01-28 03:15:28 Debug: write into session: url.page => 1
2011-01-28 03:15:28 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------

Firefox:

2011-01-28 03:16:24 Debug: write into session: Config.time =>
1296192984
2011-01-28 03:16:24 Debug: write into session:
Auth.User.activeRecordId => __noid__
2011-01-28 03:16:24 Debug: write into session: Auth.User.isajax =>
false
2011-01-28 03:16:24 Debug: write into session: url.url => /
2011-01-28 03:16:24 Debug: write into session: url.page => 1
2011-01-28 03:16:24 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:16:27 Debug: write into session: Config.time =>
1296192987
2011-01-28 03:16:27 Debug: write into session: Acl.error.status => 200
2011-01-28 03:16:27 Debug: write into session: Message.flash => Array
2011-01-28 03:16:27 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:16:29 Debug: write into session: Config.time =>
1296192988
2011-01-28 03:16:29 Debug: write into session: Auth.User.isajax =>
true
2011-01-28 03:16:29 Debug: write into session: url.url => products/
index/all
2011-01-28 03:16:29 Debug: write into session: url.page => 1
2011-01-28 03:16:29 Debug: write into session: Acl.error.check => 1
-------------------------------------------------------------------------------------------------------------------------------
2011-01-28 03:16:31 Debug: write into session: Config.time =>
1296192991
2011-01-28 03:16:31 Debug: write into session:
Auth.User.activeRecordId => 4d390234-9804-4e0a-af50-71dcc0a8010b
2011-01-28 03:16:31 Debug: write into session: Acl.error.check => 1

I'm using Version 1.3.7
Any idea what could be causing this?
Thx in advance
Axel

--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: