我正在尝试使用
AJAX在我的网站上自动填写搜索框.我用firebug来测试我的应用程序.当我尝试搜索某些内容时,Firebug告诉我AJAX请求返回403禁止错误.但是,当我复制AJAX请求中的EXACT URL时,它会返回正确的数据.
编辑:
我认为这必须是JavaScript方面的东西.与普通请求相比,AJAX请求是否可以省略任何标头?
这是$_SERVER变量(我在两个请求中删除了相同的参数)对AJAX请求失败(1)vs输入URL并且它有效(2):
(1)
2011-04-02 13:43:07 Debug: Array ( [HTTP_ACCEPT] => */* [HTTP_COOKIE] => CAKEPHP=0f9d8dc4cd49e5ca0f1a25dbd6635bac; [HTTP_X_REQUESTED_WITH] => XMLHttpRequest [REDIRECT_REDIRECT_UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG [REDIRECT_UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG [REMOTE_PORT] => 60252 [UNIQUE_ID] => TZdgK654EmIAAEjknsMAAAFG [REQUEST_TIME] => 1301766187 )
(2)
2011-04-02 13:44:02 Debug: Array ( [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_COOKIE] => CAKEPHP=d8b392a5c3ee8dd948cee656240fd5ea; [REDIRECT_REDIRECT_UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ [REDIRECT_UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ [REMOTE_PORT] => 60281 [UNIQUE_ID] => TZdgYq54EmIAAF7zt6wAAAJJ [REQUEST_TIME] => 1301766242 )
我想我找到了解决方案.我将安全级别设置为中等以解决问题.我在config文件夹中找到了这一行.中等安全级别是否会对生产造成任何问题?
/** * The level of CakePHP security. The session timeout time defined * in 'Session.timeout' is multiplied according to the settings here. * Valid values: * * 'high' Session timeout in 'Session.timeout' x 10 * 'medium' Session timeout in 'Session.timeout' x 100 * 'low' Session timeout in 'Session.timeout' x 300 * * CakePHP session IDs are also regenerated between requests if * 'Security.level' is set to 'high'. */ Configure::write('Security.level','medium');
编辑:这绝对是解决方案.这是发生的事情:
当安全级别设置为高时,将在每次请求时生成新的会话ID.
这意味着当我发出ajax请求时,会生成一个新的会话ID.
如果您保持在同一页面上,JavaScript会发出请求,生成新的session_id,并且不会记录新的session_id.
所有后续的ajax请求都使用旧的session_id,该session_id被声明为无效,并返回空会话.