使用ajax从javascript访问安全和httponly cookie时出现的问题



我的网站对cookie没有安全性,有些cookie是由javascript设置的。出于安全原因,我不得不添加安全和httponly标志,以便调整我的javascript。我找到的唯一方法就是使用ajax。

我通过ajax编写了一个由javascript调用的php脚本来设置cookie。正如我所知,javascript是单任务的,异步任务是在同步任务之后安排的。所以我不得不修改我的代码,等待ajax返回,然后再调用下一页。例如(请参阅下面的javascript),当操作为"RELOAD"时,如果在页面上找到表单标记,则提交该标记,如果没有,则进行简单的重新加载。

javascript:

function setMultiCookie(prm, action) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
setMultiCookieRet(action);
}
};
xhr.open("POST", "setMultiCookies.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("prm="+encodeURIComponent(prm));
}
function setMultiCookieRet(action) {
switch(action) {
case 'RELOAD':
var form = document.getElementsByTagName('form');
if (form.length > 0)
form[0].submit();
else
location.reload(true);
break;
case 'NONE':
break;
default:
window.open(action,'_self');
}
}

php脚本setMultiCookies.php:

<?php
header("Content-Type: text/plain");
if ($_POST["prm"] == '')
exit;
$prm = explode('µ', $_POST["prm"]);
foreach ($prm as $parms) {
list($name, $value) = explode('§', $parms, 2);
if ($value == "-unSetCookie-")
setcookie($name, '', 1, "/", "", TRUE, TRUE);
else
setcookie($name, $value, 0, "/", "", TRUE, TRUE);
}
?>

将cookie var1设置为val1,将var2设置为val2,取消设置val3,然后重新加载页面的调用示例:

<span onClick="setMultiCookie('var1§val1µvar2§val2µval3§-unSetCookie-', 'RELOAD');" class="button">

它在大多数情况下都有效,但在某些情况下,尤其是对于表单标签,它就不起作用了。我不知道会发生什么。我确信php脚本是有效的。我做了一些跟踪显示,并测试了php setcookie返回设置为true。但cookie尚未设置。我想布景还没拍完就出事了。我之前在javascript同步部分加载页面时遇到了这个问题。

如果你知道发生了什么,或者你知道调查的方法,我会很高兴。

好。与此同时,我解决了我的问题。我的例子不是一个好例子,因为它适用于span标记。我不知道为什么,但它不适用于按钮标签。不管怎样,我用跨度标签代替了按钮标签,一切都很好。

感谢SLaks和Kaddath关注我的问题。我的网站是一个内联网,需要AD登录才能访问(也用PHP编写)。

最新更新