繁体   English   中英

使用Ajax从JavaScript访问安全Cookie和仅HTTP Cookie时出现问题

[英]Problems using ajax to access secure and httponly cookies from javascript

我的网站在cookie上没有安全性,并且某些cookie是由javascript设置的。 出于安全原因,我必须添加安全和httponly标志,以便适应我的JavaScript。 我发现的唯一方法是使用Ajax。

我写了一个由javascript通过ajax调用的php脚本来设置cookie。 据我所知,javascript是monotask,异步任务是在同步任务之后进行调度的。 因此,我不得不修改代码以等待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 return设置为true。 但是未设置cookie。 我想在设置完成之前会发生一些事情。 我在javascript同步部分加载页面时遇到了这个问题。

如果您知道会发生什么或知道某种调查方法,我将很高兴。

好。 同时我解决了我的问题。 我的示例不是一个很好的示例,因为它可以使用span标签。 我不知道为什么,但不适用于按钮标签。 无论如何,我用span标签替换了按钮标签,然后一切正常。

感谢SLaks和Kaddath对我的问题的解答。 我的网站是一个Intranet网站,需要AD登录才能访问(也用PHP编写)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM