javascript - 使用 ajax 从 javascript 访问安全和 httponly cookie 的问题
问题描述
我的网站对 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 同步部分加载页面时遇到了这个问题。
如果您知道会发生什么或者您知道某种调查方法,我会很高兴。
解决方案
好的。同时我解决了我的问题。我的示例不是一个好示例,因为它适用于 span 标签。我不知道为什么,但它不适用于按钮标签。无论如何,我用跨度标签替换了按钮标签,一切都很好。
感谢 SLaks 和 Kaddath 了解我的问题。我的网站是一个内部网,需要一个 AD 登录才能访问(也是用 PHP 编写的)。
推荐阅读
- javascript - ChartJS 仅将默认选项设置为特定的 Canvas,而不是全局
- python-3.x - 如何在 Python 中构建搜索结果排名数据?
- pyomo - 未找到 Pyomo Util 模块
- sql-server - 我可以更改表的创建日期而不将其删除到 SQL Server 中吗
- sql - 在 Magento 中更改所有产品的小图像
- javascript - html 属性不适用于 js 和 jquery
- php - 将php连接到ms sql server数据库
- mongodb - 如何将 MongoDb 查询转换为 csv(excel 格式)
- java - java - 如何在java中的arraylist中获取随时间升序的日期
- python - 检查 discord 命令参数