簡體   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