2010-07-07 9 views
1

Comment puis-je demander à un utilisateur de s'authentifier, puis de télécharger une application hors connexion créée spécifiquement pour lui? Je crée un système de chiffrement à clé publique/privée pour une utilisation hors ligne et chaque utilisateur doit pouvoir se connecter et "télécharger" sa page de chiffrement/déchiffrement (app.php) en utilisant un formulaire. Ce formulaire les vide sur leur page app.php, servi avec un fichier cache-manifest. L'application doit stocker ses clés de chiffrement et de décryptage localement pour pouvoir les utiliser via Javascript. Accéder à cette page (app.php) sans aucune information de connexion doit renvoyer une page d'erreur. Toutes les mises à jour sont effectuées via ajax à api.php et stockées dans localstorage, donc le téléchargement physique de la page et son enregistrement quelque part ne fonctionneront pas (localstorage ne fonctionne pas sur les fichiers locaux).Mettre en cache une page protégée par une connexion

Voici mon fichier de cache-manifest.php:

<?php header("Content-Type: text/cache-manifest"); ?>CACHE MANIFEST 
# v1.2 
app.php 

NETWORK: 
api.php 

Rafraîchissant l'application après la connexion au (via une requête POST) conduit à la page d'erreur affiché à la place du navigateur chargement de l'application mis en cache.

EDIT:

Je soupçonne que la requête POST a quelque chose à voir avec le manque de mise en cache. Regarder Firebug au cours de la progression du téléchargement initial montre:

POST app.php 200 - Includes the application to be cached 
GET app.php 401 - The error page - this is being cached instead 

Répondre

1

La requête POST était le problème, donc je devais créer un lien de téléchargement unique pour chaque utilisateur, puis de les rediriger vers ce lien. Le lien doit pouvoir être touché au moins deux fois par le navigateur, j'ai donc donné à chaque lien un délai d'une heure avant de l'invalider. Le fichier de cache-manifeste devait également être modifié avec l'URL unique:

http://.../app.php?instanceid=(md5)

<?php header("Content-Type: text/cache-manifest"); ?>CACHE MANIFEST 
# v1.2 
app.php?instanceid=<?php echo $_GET['instanceid']; ?> 


NETWORK: 
api.php