Estoy trabajando en una extensión que analiza el feed rss de gmail para los usuarios. Permito que los usuarios especifiquen nombre de usuario/contraseñas si no desean permanecer conectados. Pero esto significa un inicio de sesión múltiple si el usuario está registrado y el nombre de usuario/contraseña proporcionado es para una cuenta diferente. Por lo tanto, quiero evitar el envío de cookies, pero aún así poder enviar el nombre de usuario/contraseña en la llamada a send().¿Hay alguna manera de no enviar cookies cuando se hace un XMLHttpRequest en el mismo origen?
Respuesta
Puede hacerlo utilizando el chrome.cookies module. La idea es conseguir que las galletas actuales, guardarlos, sacarlos de almacén de cookies del navegador, enviar su solicitud, y finalmente restaurarlos:
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
Como alternativa, una solución más simple es abrir una ventana de incógnito que enviará la solicitud, usando el chrome.windows module, pero esto evitará que se comunique con el resto de su extensión. Tenga en cuenta que puede que tenga que cambiar la propiedad incognito
de su manifiesta a split
:
var incognito_window = {
"url": "incognito.html",
"focused": false, // do not bother user
"incognito": true
}
chrome.windows.create(incognito_window);
A partir de Chrome 42, la fetch
API permite extensiones de Chrome (y aplicaciones web en general) para realizar peticiones sin cookies. HTML5 Rocks offers an introductory tutorial on using the fetch API.
La documentación avanzada en fetch
es bastante escasa en este momento, pero el API interface from the specification es un excelente punto de partida. El algoritmo de búsqueda descrito debajo de la interfaz muestra que las solicitudes generadas por fetch
no tienen credenciales por defecto.
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);
});
Si desea que las solicitudes verdaderamente anónimas, también se puede desactivar la caché:
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. ¿Hay alguna manera de no enviar un formulario web completo al hacer clic en un botón?
- 2. ¿Hay alguna manera de ver el origen de un archivo pcode (.p) en MATLAB?
- 3. En Perl, ¿hay alguna manera de reiniciar el programa que se ejecuta desde sí mismo?
- 4. ¿Hay alguna manera más corta de requerir un archivo en el mismo directorio en ruby?
- 5. origen cruzado XMLHttpRequest en extensiones de cromo
- 6. ¿hay alguna manera de ver el origen de un módulo desde la consola de python?
- 7. ¿Hay alguna manera de evitar que el texto se vuelva gris cuando desactivo un botón?
- 8. ¿Hay alguna manera de desactivar el flash/parpadeo en el iPad/iPhone cuando se activa un clic?
- 9. ¿Hay alguna manera de descargar Xcode por sí mismo?
- 10. se negó a fijar cabecera insegura "Origen" cuando se utiliza XMLHTTPRequest de Google Chrome
- 11. ¿Hay alguna manera de enviar parámetros opcionales a una acción?
- 12. ¿Hay alguna manera de que un evento de inicio táctil no active el evento click?
- 13. El uso de una fuente personalizada en un UITextField hace que cambie ligeramente cuando se accede, ¿hay alguna solución?
- 14. ASP.NET MVC: ¿hay alguna manera de simular un ViewState?
- 15. ¿Hay alguna manera de omitir el parámetro?
- 16. ¿hay alguna manera de generar un coredump legible gdb cuando se ejecutan programas compilados con MinGW?
- 17. ¿Hay alguna manera de matar el erlang vm cuando se ejecuta con -heart?
- 18. ¿Hay alguna manera de controlar el elemento NSMenuItem que se resalta inicialmente al abrir un menú?
- 19. ¿Hay alguna manera de evitar que Eclipse abra el navegador cuando se inicia una aplicación web?
- 20. ¿Hay alguna manera de enviar el tipo de datos java a la consola?
- 21. ¿Hay alguna manera de negar un predicado?
- 22. ¿hay alguna manera de dormir() en un procedimiento almacenado?
- 23. ¿Hay alguna manera de tener diferentes vistas en un NSCollectionView?
- 24. ¿Hay alguna manera de desencadenar una compilación cuando se actualiza un SVN externo?
- 25. ¿Hay alguna manera de evitar que Symfony2 envíe cookies de sesión para ciertas rutas?
- 26. Enviar un archivo como multiparte a través de xmlHttpRequest
- 27. ¿Hay alguna manera de hacer que el texto no se pueda seleccionar en una página HTML?
- 28. ¿Hay alguna manera de simular un clic en una alerta en JavaScript?
- 29. ¿Hay alguna manera de permitir que varias cadenas compartan el mismo punto final en Catalyst?
- 30. ¿Qué hace cin cuando hay un error
debería eliminar el 'cookie.hostOnly; y' 'eliminar cookie.session;' 'líneas sean realmente eliminar my_cookie_store [i] .hostOnly; 'y' eliminar my_cookie_store [i] .session; 'respectivamente? – Mala