我的网站对 cookie 没有安全性,一些 cookie 是由 javascript 设置的。出于安全原因,我不得不添加安全和 httponly 标志,以适应我的 javascript。我发现的唯一方法是使用 ajax。
我写了一个由 javascript thru ajax 调用的 php 脚本来设置 cookie。据我所知,javascript 是单任务,异步任务安排在同步任务之后。所以我不得不修改我的代码以等待 ajax 返回,然后再调用下一页。例如(参见下面的 javascript),当 action 为“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 return 设置为 true。但是没有设置cookies。我想在设置完成之前会发生一些事情。我之前在 javascript 同步部分加载页面时遇到了这个问题。
如果您知道会发生什么或者您知道某种调查方法,我会很高兴。