Tôi đang làm việc trên tiện ích mở rộng phân tích nguồn cấp dữ liệu rmail gmail cho người dùng. Tôi cho phép người dùng chỉ định tên người dùng/mật khẩu nếu họ không muốn duy trì trạng thái đăng nhập. Nhưng điều này vi phạm nhiều lần đăng nhập nếu người dùng đăng nhập và tên người dùng/mật khẩu được cung cấp là cho một tài khoản khác. Vì vậy, tôi muốn tránh gửi bất kỳ cookie nào nhưng vẫn có thể gửi tên người dùng/mật khẩu trong cuộc gọi send().Có cách nào để không gửi cookie khi tạo XMLHttpRequest trên cùng một nguồn gốc không?
Trả lời
Bạn có thể làm điều đó bằng cách sử dụng chrome.cookies module. Ý tưởng là để có được các cookie hiện tại, lưu chúng, loại bỏ chúng khỏi cửa hàng cookie của trình duyệt, gửi yêu cầu của bạn, và cuối cùng khôi phục chúng:
var cookies_temp = []; // where you put the cookies first
var my_cookie_store = []; // the cookies will be there during the request
var details = {/*your code*/}; // the first parameter for chrome.cookies.getAll()
var start_kidnapping = function(cookies) {
cookies_temp = cookies.slice();
kidnap_cookie();
};
var kidnap_cookie = function() {
// This recursive function will store the cookies from cookies_temp to
// my_cookie_store and then remove them from the browser's cookie store.
if (cookies_temp.length == 0) { // when no more cookies, end recursion
send_request();
};
else {
var cookie = cookies_temp.pop();
// We store url as a property since it is useful later.
// You may want to change the scheme.
cookie.url = "http://" + cookie.domain + cookie.path;
my_cookie_store.push(cookie); // save it
chrome.cookies.remove({url: cookie.url, name: cookie.name}, kidnap_cookie);
};
};
var send_request = function() {
// Send your request here. It can be asynchronous.
for (var i = 0, i < my_cookie_store.length; i++){
delete cookie.hostOnly; // these 2 properties are not part of the
delete cookie.session; // object required by chrome.cookies.set()
// note that at this point, cookie is no longer a Cookie object
chrome.cookies.set(my_cookie_store[i]); // restore cookie
};
my_cookie_store = []; // empty it for new adventures
};
chrome.cookies.getAll(details, start_kidnapping); // start
Ngoài ra, một giải pháp đơn giản hơn là mở một cửa sổ ẩn danh mà sẽ gửi yêu cầu, sử dụng chrome.windows module, nhưng điều này sẽ ngăn bạn giao tiếp với phần còn lại của tiện ích mở rộng của bạn. Lưu ý rằng bạn có thể phải thay đổi incognito
tài sản của biểu hiện của bạn để split
:
var incognito_window = {
"url": "incognito.html",
"focused": false, // do not bother user
"incognito": true
}
chrome.windows.create(incognito_window);
Tính đến Chrome 42, fetch
API cho phép phần mở rộng Chrome (và các ứng dụng web nói chung) để thực hiện các yêu cầu cookie ít hơn. HTML5 Rocks offers an introductory tutorial on using the fetch API.
Tài liệu nâng cao trên fetch
hiện khá thưa thớt tại thời điểm này, nhưng API interface from the specification là điểm khởi đầu tuyệt vời. Thuật toán tìm nạp được mô tả bên dưới giao diện cho thấy rằng các yêu cầu được tạo bởi fetch
không có thông tin xác thực theo mặc định!
fetch('http://example.com/').then(function(response) {
return response.text(); // <-- Promise<String>
}).then(function(responseText) {
alert('Response body without cookies:\n' + responseText);
}).catch(function(error) {
alert('Unexpected error: ' + error);
});
Nếu bạn muốn yêu cầu hoàn toàn vô danh, bạn cũng có thể vô hiệu hóa bộ nhớ cache:
fetch('http://example.com/', {
// credentials: 'omit', // this is the default value
cache: 'no-store',
}).then(function(response) {
// TODO: Handle the response.
// https://fetch.spec.whatwg.org/#response-class
// https://fetch.spec.whatwg.org/#body
});
- 1. xmlhttprequest và set-cookie & cookie
- 2. NSURLRequest không gửi cookie
- 3. Có sự khác biệt đáng kể nào trong cách các trình duyệt thực hiện chính sách cùng nguồn gốc không?
- 4. JavaScript để phát hiện xem khung chính có cùng nguồn gốc không?
- 5. cách cookie có thể theo dõi người dùng mặc dù có cùng chính sách gốc?
- 6. deserializing có nguồn gốc loại sử dụng DataContractSerializer khi loại có nguồn gốc không được biết trước
- 7. XMLHttpRequest không thể tải Yêu cầu nguồn gốc chéo chỉ được hỗ trợ cho HTTP
- 8. Có thể sử dụng CSRF khi không có Cookie không?
- 9. XMLHttpRequest bị từ chối bởi Access-Control-Allow-Origin mặc dù nguồn gốc phù hợp một cách hoàn hảo
- 10. Khi nào không thích hợp để sử dụng các bảng có nguồn gốc?
- 11. Không thể để tạo ra hình ảnh có nguồn gốc sử dụng image_style_url
- 12. Cookie có được gửi cùng với yêu cầu hình ảnh không?
- 13. Làm cách nào để truy cập JSON từ khung nội tuyến có nguồn gốc từ cùng một tên miền?
- 14. Youtube "Chặn khung có nguồn gốc" http://www.youtube.com "truy cập vào khung có nguồn gốc" ngay cả khi cùng một giao thức được sử dụng
- 15. Nếu có một phản hồi cookie thiết lập từ một xmlhttprequest, trình duyệt sẽ tôn trọng nó và đặt cookie?
- 16. Có cách nào để lấy nguồn gốc của hộp cảnh báo không?
- 17. Cách Postman gửi yêu cầu? ajax, cùng chính sách gốc
- 18. PyS60 có tạo ra các tệp sis có nguồn gốc không?
- 19. Làm cách nào để tạo một cookie liên tục và không liên tục?
- 20. Tôi có thể tạo XMLHttpRequest thành tên miền khác không?
- 21. Có thể một tên miền có nhiều cookie không?
- 22. Có cách nào để ngăn chặn Symfony2 gửi cookie phiên cho một số đường dẫn nhất định không?
- 23. Không thể gửi cookie bằng RestSharp
- 24. Cookie có chỉ lưu trữ trên máy chủ thay thế cookie không có cookie?
- 25. Tại sao $ .post() phải tuân theo chính sách có cùng nguồn gốc, nhưng gửi biểu mẫu có phương thức = 'POST' được không?
- 26. Có thể tạo ra sản phẩm PHP có nguồn gốc đóng cửa không?
- 27. Cookie JQuery jsession không được gửi đến máy chủ
- 28. Làm thế nào để thiết lập một cookie cho iframe trên cùng một tên miền
- 29. Các lớp có nguồn gốc không phải QObject "luôn luôn" được đặt trên ngăn xếp?
- 30. XMLHttpRequest không thêm tiêu đề - "X-Requested-With: XMLHttpRequest"
nên 'xóa cookie.hostOnly; 'và' xóa cookie.session; 'dòng thực sự được' xóa my_cookie_store [i] .hostOnly; 'và' xóa my_cookie_store [i] .session; 'tương ứng? – Mala